我的应用程序一直在终端中运行,我想做的是在同一个程序中关闭这个应用程序,然后用新的参数再次打开它。如何做到这一点?

2 个评论
Rook
你需要提供一些手段来从外部控制 app ,可以通过管道(或其他IPC机制),或者让它响应一个信号(例如SIGHUP),你的控制应用程序可以使用这些手段来终止它,然后根据需要重新执行它。
你能告诉我投反对票的原因吗?
c++
c
linux
terminal
rajat
rajat
发布于 2012-09-06
2 个回答
pb2q
pb2q
发布于 2012-09-06
已采纳
0 人赞同

你不能用 system 来做这个。来自(BSD)的 man 3 system

呼叫过程 等待 让shell完成命令的执行,忽略SIGINT和SIGQUIT,并阻止SIGCHLD。

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

你可以通过使用 fork / exec 启动你的程序来获得你想要的行为。- 人工页 here ,以及 here .这就是 system 在幕后所做的事情。你将启动子进程并在你的应用程序中保持控制。

Using fork , you'll get a process id for your launched process,以及using that you can e.g. terminate the program using kill - man page here - 并重新启动该程序。

找一找 fork / exec 的例子,这个网站上可能有很多。

Rook
你得到了所要求的一半行为,但另一半很容易实现。 fork() 返回一个进程ID,然后在需要时使用 kill(pid, signal) 来终止生成的进程。
Matthew Walton
Matthew Walton
发布于 2012-09-06
0 人赞同

替换代码0】只让你启动另一个进程并获得其退出代码。你不能对其他进程的生命周期进行任何控制。