process - 如何向通过 fork 和 execl 创建的子进程发送信号?

标签 process c signals exec fork

假设我有一个程序foo,它只是永远打印,但在此之前停止,

int main(int argc, char * argv[])
{
    kill(getpid(), SIGSTOP);
    while(1) {
        printf("foo\n");
    }
    return 0;
}

然后我有一个程序 bar 可以 fork 并运行 foo:

int main(int argc, char * argv[])
{
    pid_t pid = fork();
    if (pid == 0)
    {
        execl("foo", "foo", NULL);
    }
    return 0;
}

现在,我希望 bar 能够向 foo 发送 SIGCONT,以便它可以继续执行打印任务,然后再次发送 SIGSTOP,甚至稍后发送再次 SIGCONT,依此类推。

我不知道该怎么做。有什么帮助吗?

编辑:我找到了我的问题。显然,foo 程序在运行时尚未准备好立即接受信号。当我这么做的时候

sleep(5);
int rc = kill(pid, SIGCONT);

成功了。

最佳答案

pid_t pid = fork();
if (pid == 0)
{
    execl("foo", "foo", NULL);
}
int rc = kill(pid, 18);
return 0;

关于process - 如何向通过 fork 和 execl 创建的子进程发送信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49722320/

相关文章:

c - 程序无限循环

c - EEPROM 存储和初始化从整数生成指针,无需强制转换

c - 为什么 i=2+2*i++ 给出错误的结果?

c - 为什么我的信号处理程序无法使用 sigaction 函数工作?

C# process.start,如何知道进程是否结束?

c++ - 如何保证在进程退出或在c++中被杀死时执行某些代码?

c - 实现 isalpha(const char *s) - 如何改进此功能?

performance - 用信号实现TCP/IP套接字客户端服务器是个好主意吗?

c - sigsuspend 与处理程序执行期间传递的其他信号

c++ - C++ 中 OpenProcess 的 Vista/7 编译和 XP/2000 执行问题