我正在用 C 编写 shell 应用程序,遇到一个问题,发送 SIGINT 来处理正在运行的脚本不会阻止它。
向普通可执行文件发送相同的信号效果很好。
例子:
Bash 脚本只是模仿长工作脚本(work.sh):
#! /bin/bash
COUNTER=0
while true
do
((COUNTER+=1))
echo "#${COUNTER} Working..."
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
C代码:
int main() {
pid_t pid = fork();
if (pid == 0) {
char* cmds[] = { "./work.sh", NULL };
if (execvp(cmds[0], cmds) == -1) {
exit(1);
}
} else {
sleep(5);
kill(pid, SIGINT);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
发送信号后,主进程结束,但脚本继续打印。
脚本中的信号处理是否有所不同?您需要如何停止子进程忽略正在运行的进程?