相关疑难解决方法(0)

向运行脚本的分叉 exec 进程发送 SIGINT 不会杀死它

我正在用 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)

发送信号后,主进程结束,但脚本继续打印。

脚本中的信号处理是否有所不同?您需要如何停止子进程忽略正在运行的进程?

c bash signals

1
推荐指数
1
解决办法
2559
查看次数

标签 统计

bash ×1

c ×1

signals ×1