在暂停时向子进程发送信号

时间:2020-05-03 08:35:42

标签: c linux signals pause

我的目的是在子进程创建后暂停它。然后,我想中断暂停,并通过父进程通过kill()发送的信号来执行此操作。主要问题是在这种情况下我应该把pause()放在哪里。

这是到目前为止我得到的:

int main()
{
    int pid;

    if ((pid = fork()) < 0) //error occured
    {
        perror("fork");
        exit(1);
    }

    if (pid == 0) //___Child___
    {
        signal(SIGHUP, sighup);
        printf("Tryna work with pause():\n");
        printf("Before pause:\n");
        pause();
        printf("After pause.\n");

        for(;;) //infinite loop
            ;
    }

    else //___Parent___
    { /* pid hold id of child */
        printf("\nPID=%d\n\n",pid);
        printf("\nPARENT: sending SIGHUP\n\n");
        kill(pid, SIGHUP);

        sleep(3); //wait 3 secs
    }
}

void sighup()
{
    signal(SIGHUP, sighup) //reset signal;
    printf("In handler...");
}

main 5053之类的Linux终端中调用它,输出为:

PID=1939

PARENT: sending SIGHUP

1 个答案:

答案 0 :(得分:0)

唯一要更改的是在kill之后移动sleep,以使子进程有时间运行。

{
    ...
    printf("\nPARENT: sending SIGHUP\n\n");
    kill(pid, SIGHUP);

    sleep(3); //wait 3 secs
    ...
}
相关问题