Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用c++;程序_C++_C_Linux_Terminal - Fatal编程技术网

C++ 使用c++;程序

C++ 使用c++;程序,c++,c,linux,terminal,C++,C,Linux,Terminal,我可以使用以下命令在终端中打开程序: stringstream s; s<<"./~/rajat/app -parameter"; system(s.str().c_str()); strings; s使用系统无法执行此操作。来自(BSD)man 3系统: 调用进程等待shell完成执行命令,忽略SIGINT和SIGQUIT,并阻塞SIGCHLD 因此,您的应用程序将被阻止,直到启动的程序完成或终止 您可以通过使用fork/exec-手册页和启动程序来获得所需的行为。这就是系统在发

我可以使用以下命令在终端中打开程序:

stringstream s;
s<<"./~/rajat/app -parameter";
system(s.str().c_str());
strings;

s使用
系统
无法执行此操作。来自(BSD)
man 3系统

调用进程等待shell完成执行命令,忽略SIGINT和SIGQUIT,并阻塞SIGCHLD

因此,您的应用程序将被阻止,直到启动的程序完成或终止

您可以通过使用
fork
/
exec
-手册页和启动程序来获得所需的行为。这就是
系统
在发动机罩下所做的工作。您将启动子流程并在应用程序中保持控制

使用
fork
,您将获得已启动进程的进程id,使用该id,您可以使用
kill
-手册页终止程序,然后重新启动程序

查找
fork
/
exec
示例,此站点上可能不止这些示例。

system()
仅允许您启动另一个进程并获取其退出代码。您无法控制其他流程的生命周期

如果要启动其他流程并控制它们,则需要使用其他方法。经典的方法是
fork()
将您自己的进程一分为二,并
exec()
子进程中的另一个进程。然后,父对象将从
fork()
调用中获得子对象的PID,然后当您想要终止它时,可以从父对象向子对象发送合适的信号

这有点混乱(特别是当您开始处理SIGHUP和清理僵尸进程时),但我不知道有哪个标准或Boost库可以为您处理这些讨厌的部分。不过,在开始手动编写之前,您可能应该检查一下


如果你使用
fork()
,网上有很多指南,可以让你了解几十年来围绕它形成的细节和习惯用法。

你需要提供一些方法,从外部通过管道(或其他IPC机制)或让它响应信号来控制
app
(例如SIGHUP)并且您的控制应用程序可以使用这些方法终止它,然后根据需要重新执行它。您能告诉我反对投票的原因吗?您得到了一半请求的行为,但另一半很容易实现。
fork()
返回一个进程ID,然后使用
kill(pid,信号)
在需要时终止生成的进程。