gpt4 book ai didi

c - 杀死 bash 和子进程

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:05 25 4
gpt4 key购买 nike

我的 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 正在 fork 一个单独的进程来执行 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),但查找进程 (7803) 仍在继续执行。我怎样才能确保 bash 进程将信号传播给它的子进程?

最佳答案

它将向传入参数的进程组 ID 和所有子进程发送一个 SIGTERM。

kill -- -$(ps -o pgid= $PID | grep -o [0-9]*)

此外,关于这篇文章的更多答案:Best way to kill all child processes

关于c - 杀死 bash 和子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23032296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com