【发布时间】:2021-09-09 05:58:11
【问题描述】:
我正在尝试使用 2 个进程和 2 个用户定义的信号处理程序来玩“乒乓”。
问题是由于某种原因,在我raise(SIGSTOP)子进程为了让父进程启动之后,我无法继续运行子进程,即使我发送了一个kill(getppid(), SIGUSR1 ,在我看来,应该重新运行该过程。
这里有什么问题?
void handle_siguser1(int signal_id);
void handle_siguser2(int signal_id);
enum {CHILD = 0, PARENT = 1};
/************************* Functions Implementations *************************/
int main()
{
/* create a child process */
pid_t pid = fork();
while (1)
{
/* returned to the newly created child process. */
if (CHILD == pid)
{
printf("Child registers its signal handler\n");
signal(SIGUSR1, handle_siguser1);
printf("Child stops to return the control to the parent\n");
raise(SIGSTOP);
}
/* returned to parent */
else
{
printf("Parent process started running\n");
printf("Parent stops to let child to register signal\n");
sleep(1);
printf("Parent registers its signal handler\n");
signal(SIGUSR2, handle_siguser2);
printf("Parent waits child to be stopped\n");
waitpid(getpid(), NULL, WUNTRACED);
printf("Parent starts child process\n");
kill(getpid(), SIGUSR1);
}
}
return 0;
}
/******************************************************************************/
void handle_siguser1(int signum)
{
printf("PONG\n");
sleep(2);
kill(getppid(), SIGUSR2);
}
/******************************************************************************/
void handle_siguser2(int signum)
{
printf("PING\n");
sleep(2);
kill(getpid(), SIGCONT);
}
/******************************************************************************/
这段代码的输出是:
Parent process started running
Parent stops to let child to register signal
Child registers its signal handler
Child stops to return the control to the parent
Parent registers its signal handler
Parent waits child to be stopped
Parent starts child process
User defined signal 1
谢谢。
【问题讨论】:
-
您只能使用 SIGCONT 信号重新启动已停止的进程。
-
这正是我想要做的。子进程确实被
raise(sigstop)停止了 -
@NoobCoder 你如何协调“这正是我想要做的”与标题中的短语:“而不是 SIGCONT”?两者似乎是矛盾的。
标签: c process signals fork system-calls