C++ 使用system()执行后台进程

C++ 使用system()执行后台进程,c++,linux,process,background,C++,Linux,Process,Background,我尝试使用如下方式执行流程: 系统(“zsh&”) 但是我认为它不起作用,因为这个过程没有出现。为什么不起作用?应该如何更改?下面的代码工作得很好,使用htop,我可以看到在我的应用程序终止后,睡眠仍在运行。我看不出你的代码应该有什么不同 #include <stdio.h> int main() { return system("sleep 100 &"); } #包括 int main() { 返回系统(“睡眠100&”); } 这是因为zsh和所有sh

我尝试使用如下方式执行流程:

系统(“zsh&”)


但是我认为它不起作用,因为这个过程没有出现。为什么不起作用?应该如何更改?

下面的代码工作得很好,使用htop,我可以看到在我的应用程序终止后,睡眠仍在运行。我看不出你的代码应该有什么不同

#include <stdio.h>

int main()
{ 
   return system("sleep 100 &");
} 
#包括
int main()
{ 
返回系统(“睡眠100&”);
} 

这是因为zsh和所有shell都绑定了stdin,它无法在后台运行,所以崩溃了。这也是为什么“在后台睡眠”起作用的原因。

无论在后台运行什么符号,或者system()将执行什么操作,您都在启动一个交互式shell。当您启动交互式shell时,它会查找要连接的控制台,如果连接失败,它会查找要处理的stdin行。如果做不到这一点,它就会退出。这就是正在发生的事情。

难道
&
不意味着背景,因此它不应该出现,不是吗?您是否检查了后台运行的作业?您传递给系统的实际命令字符串是什么?无论您传递什么,都会传递给系统的shell(通常是/bin/sh),因此您可以尝试使用
/bin/sh-c“您的命令&”
进行测试。