gpt4 book ai didi

c - 为什么 ntimes 不在子进程中添加一个?

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:37 25 4
gpt4 key购买 nike

代码如下:

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

int ntimes = 0;

int main()
{
int pid,ppid;
int p_action(),c_action();

/* set parent process SIGUSR1 */
signal(SIGUSR1,p_action);

switch(pid=fork()){
case -1: /* fork failed */
perror("synchro");
exit(1);
case 0: /* child process mode */
/* set child process SIGUSR1 */
signal(SIGUSR1,c_action);

/* get parent process */
ppid = getppid();

for(;;){
sleep(1);
kill(ppid,SIGUSR1);
pause();
}

/* dead loop */
break;

default: /* parent process mode */
for(;;){
pause();
sleep(1);
kill(pid,SIGUSR1);
}
/* dead loop*/
}

return 0;
}

p_action()
{
printf("Parent caught signal #%d\n",++ntimes);
}

c_action()
{
printf("Child caught signal #%d\n",++ntimes);
}

输出是:

父捕获信号#1 child 捕获信号 #1父捕获信号 #2 child 捕获信号 #2父捕获信号 #3 child 捕获信号 #3...

为什么 child 的 ntimes 与 parent 相同而不是++1,如 parent-1,child-2,parent-3,child-4,...

谢谢!

最佳答案

parent 和 child (dren) 共享同一组变量。

父项的变量在其创建时被“复制”给子项,从那时起子项独立使用其自己的变量,与父项对其变量所做的相同。

关于c - 为什么 ntimes 不在子进程中添加一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42606140/

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