【发布时间】:2013-07-13 15:32:57
【问题描述】:
我已经构建了一个 bash 脚本来启动我系统中的一些进程。它只是调用进程和相关的配置文件。就像我从命令行调用一样。
#!/bin/bash
# Start specified process in a new session
setsid $1 &>/dev/null &
所以要启动someprocess,我会从命令行调用:
root@supercomputer:~# start someprocess
这就像一个魅力。每一个过程,每一次。但是当我从另一个正在运行的 C++ 进程中调用 system 时,someprocess 永远不会启动。
system( "start someprocess" )
这种方法适用于我 90% 的流程,除了一个。工作流程和非工作流程的唯一区别是非工作流程使用了下面的专有库。我最近在 bash 脚本中添加了 setsid 选项,希望启动一个新会话会有所帮助,但这并没有什么不同。我也试过popen 和execv。不用找了。
所以我的问题是,用system() 调用某事和从命令行进行同样的调用有什么区别?
Linux 上的所有进程都是用 C++ 编写的。
【问题讨论】:
-
有什么不同:可能是环境?
-
您是否检查了通常的嫌疑人 - 权限、LD_PATH、环境变量等? C++ 系统包装器是同一个用户和/或 root 等?您从 system、popen、execv 等返回什么样的 errno 值?
-
@Kerrek SB, @Duck 在
~/.bashrc中为该程序设置了环境变量,当我使用system()启动程序时,如何确保/检查它们是否已设置?我认为调用 bash 脚本意味着bashrc得到了来源
标签: c++ linux process parent-child