# include<stdio.h> # include<signal.h> # include<unidtd.h> # include<stdlib.h> void waiting(),stop(); int wait_mark; main() { int p1,p2; signal(SIGINT,stop); //接受到^c信号,转stop while((p1=fork())== -1); //创建子进程P1 if(p1>0) //判断p1是否是父进程 { while((p2=fork())== -1); //创建子进程P1 if(p2>0) { wait_mark=1; waiting(0); kill(p1,10); //向p1发软中断信号10 kill(p2,12); //向p2发软中断信号12 wait(); //同步 wait(); print("patent process is killed!\n"); exit(0); } else { wait_mark=1; signal(12,stop); //接收到软中断信号12,转stop waiting(); lockf(1,1,0); printf("child process 2 is killed by parent!\n"); lockf(1,0,0); exit(0); } } else { wait_mark=1; signal(10,stop); //接收到软中断信号12,转stop waiting(); lockf(1,1,0); printf("child process 1 is kelled by parent!\n"); lockf(1,0,0); exit(0); } } void waiting() { while(wait_mark!=0); } void dtop() { wait_mark=0; }为什么p1>1才能继续创建p2
时间: 2024-04-25 14:26:46 浏览: 65
C标准库函数集
5星 · 资源好评率100%
这段代码是一个进程通信的示例,使用了Linux中的进程间通信机制——信号(signal)。这里通过创建两个子进程P1和P2,并向它们发送软中断信号,实现了进程之间的同步和通信。
在这段代码中,判断p1>1的原因是为了保证P1进程已经成功创建。fork()函数创建子进程时,如果返回值为-1,则表示创建失败,需要重新尝试创建。当创建P1进程成功后,才能继续创建P2进程。这样可以保证P2进程的创建不会受到P1进程创建的影响,从而保证了进程之间的独立性。
需要注意的是,这段代码中存在一些问题,例如信号处理函数的定义不正确,变量名拼写错误等问题。如果需要使用此代码,请先进行修改和调试。
阅读全文