【发布时间】:2014-04-12 15:24:03
【问题描述】:
我的 C 程序在 bash shell 中执行命令。为此,我 fork 并在我运行的子进程中:
char* command = "..."; /* provided by user */
execlp("/bin/bash", "bash", "-c", command, NULL);
如果这是一个长时间运行的命令,我希望可以选择终止它。例如,假设我在做:
execlp("/bin/bash", "bash", "-c", "find / test", NULL);
在这之后,我知道正在执行 bash 的孩子的 PID,但是 bash 正在分叉一个单独的进程来执行 find。
$ ps aux | grep find
zmb 7802 0.0 0.1 5252 1104 pts/1 S+ 11:17 0:00 bash -c find / test
zmb 7803 0.0 0.0 4656 728 pts/1 S+ 11:17 0:00 find / test
我可以杀死 bash 进程 (7802),但 find 进程 (7803) 仍然继续执行。如何确保 bash 进程将信号传播给它的子进程?
【问题讨论】: