c - 在后台 C linux 中运行一个新的子进程

标签 c linux process background fork

我正在尝试在后台运行一个新进程,以便可以继续使用父进程。

我使用 fork 然后 execl。我试图向 execl 命令添加参数 & 但它不起作用:

execl("newproc","newproc","arg1","&",NULL);

有什么解决办法吗?

最佳答案

自从您使用 fork 后, child 将在后台运行。子进程将继续与父进程并行运行(如果 exec 成功)。如果您关心子进程是否成功(您的代码应该),您最终应该调用 waitpid 来收集它的退出状态。否则,您应该调用 fork 两次 并让中间进程退出而不为子进程wait,这样 init采用孙进程。

正如@mah 所说,& 是不必要的。但是那条线需要另一个改变; execl 是可变参数函数,因此函数原型(prototype)不负责将参数转换为正确的类型。因此,最终参数应作为正确的类型传递 - 只需将其更改为 (char*)NULL

您提到您的代码无效。虽然这可能只是因为虚假的 &,但也可能是因为第一个参数。 execl 函数不会在 $PATH 中搜索指定程序,因此除非 newproc 实际上位于当前目录中,否则此 execl( ) 调用将返回。当 execl 返回时,这总是表明存在问题。解决此问题的最简单方法是使用 execlp() 而不是 execl()。另一种方法是将绝对路径指定为第一个参数。您甚至可以将相对路径指定为第一个参数,但这很少有用。

关于c - 在后台 C linux 中运行一个新的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972310/

相关文章:

C:返回通用寄存器

linux - 使用 Unix TC 整形高带宽流量

java - 检测你是在Application中的主进程还是远程服务进程

database - 您如何处理多个开发人员和数据库更改?

c - x86-64 程序集 "cmovge"到 C 代码

c - strtok 问题,它没有按预期工作

linux - 如何停止分钟的 cron 工作?

python - 正则表达式 grep,在 function() 中查找 $string 和 $string

linux - 调用fork后什么时候创建用户空间栈?

c++ - popen 挂起并导致 CPU 使用率达到 100