请教一个 Linux c kill 和 raise 信号的问题

2017-02-28 10:09:01 +08:00
 diffworld

我按照书上的代码执行,但是子进程里面的 printf 没有被打印,请问这是为什么 代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>


int main(int argc, char *argv[])
{
    pid_t pid;
    int res;

    pid = fork();
    if (pid < 0)
    {
        perror ("Fork error\n");
        exit(0);
    }
    
    if (pid == 0)
    {
        printf ("child(pid:%d) is waiting for signal\n", getpid());
        raise(SIGSTOP);
        exit(0);
    }

    else
    {
        if ((waitpid(pid, NULL, WNOHANG)) == 0)
        {
            if ((res = kill(pid, SIGKILL)) == 0)
            {
               printf ("parent kill %d\n", pid); 
            }
        }

        waitpid(pid, NULL, 0);
        exit(0);
        
    }
}

输出结果如下:

parent kill 20551

为什么子进程里面的 printf 没有执行,请问有人能帮我解答这个问题吗?

1367 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343724

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX