gpt4 book ai didi

c - Kill() 错误 : no such process?

转载 作者:行者123 更新时间:2023-11-30 17:24:52 26 4
gpt4 key购买 nike

我必须通过终端插入一个奇数。之后,它生成两个进程A和B。然后它发送SIGUSR2向 B 发出信号,他的处理程序打印 argv[1] 的倒数。然后,B 睡 argv[1]秒并发送 SIGUSR1在终止之前向 A 进程发出信号。 SIGUSR1进程 A 的处理程序打印一些内容,然后终止。问题是SIGUSR1进程 A 的处理程序不起作用,因为 SIGUSR2 无法发送信号进程 B 的处理程序。事实上,kill(A,SIGUSR1)表明不存在这样的进程(对于进程 A)。在进程A中设置信号处理程序后,在pause()中。谁能帮我解决吗?谢谢。

#include <stdio.h> 
#include <stdlib.h>
#include <signal.h>

int arg;
int pid1 = 11, pid2 = 12;

void sigusr2Handler1(int);
void sigusr1Handler2(int);

int main(int argc, char* argv[])
{
if(argc != 2){
printf("Usage: %s num(int)\n", argv[0]);
exit(1);
}
arg = atoi(argv[1]);
pid1 = fork();
if (pid1 != 0)
pid2 = fork();
if (arg%2 != 0) {
if (pid1 == 0) {
if (signal(SIGUSR1, sigusr1Handler2) == SIG_ERR) {
printf("PID %d can't catch SIGUSR1\n", getpid());
exit(1);
}
printf("PID1 %d sigusr1 handler2 installation\n", getpid());
pause();
}
if (pid2 == 0) {
signal(SIGUSR2, sigusr2Handler1);
printf("PID2 %d sigusr2 handler installation\n", getpid());
kill(0, SIGUSR2);
}
}

return 0;
}

void sigusr2Handler1(int sig)
{
printf("PID %d Received SIGUSR2. 1/%d = %f.\n", getpid(), arg, (float)1 / arg);
sleep(arg);
if (kill(pid1, SIGUSR1) < 0) {
perror("Kill error");
exit(1);
}
printf("PID %d. Sent SIGUSR1 to %d. Closing\n", getpid(), pid1);
exit(0);
}

void sigusr1Handler2(int sig)
{
printf("PID %d Received SIGUSR1. Closing.\n", getpid());
exit(0);
}

最佳答案

pid2 尝试向其发送 SIGUSR1 时,

pid1 已被终止。 pid2是 killer 。

当 pid2 发出 kill(0, SIGUSR2) 时, 会发送 SIGUSR2 to the entire process group ,包括pid1。这会杀死 pid1,它没有准备好接收 SIGUSR2。

关于c - Kill() 错误 : no such process?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27175050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com