資源簡介
(1)進程的軟中斷通信
#include
#include
#include
#include
int wait_flag;
void stop();
main( ) {
int pid1, pid2; // 定義兩個進程號變量
signal(2,stop); // 或者 signal (14,stop);
while((pid1 = fork( )) == -1); // 若創建子進程1不成功,則空循環
if(pid1 > 0) { // 子進程創建成功,pid1為進程號
while((pid2 = fork( )) == -1); // 創建子進程2
if(pid2 > 0) {
wait_flag = 1;
//sleep(1); // 父進程等待5秒
kill(pid1,SIGUSR1); // 殺死進程1
kill(pid2,SIGUSR2); // 殺死進程2
wait(0);
wait(0);
printf("\n Parent process is killed !!\n");
exit(0); // 父進程結束
}
else {
wait_flag = 1;
signal(SIGUSR2,stop); // 等待進程2被殺死的中斷號17
printf("\n Child process 2 is killed by parent !!\n");
exit(0);
}
}
else
{
wait_flag = 1;
signal(SIGUSR1,stop); // 等待進程1被殺死的中斷號16
printf("\n Child process 1 is killed by parent !!\n");
exit(0);
}
}
void stop() {
wait_flag = 0;
}
(2)進程的管道通信
#include
#include
#include
int pid1,pid2; // 定義兩個進程變量
main( ) {
int fd[2];
char OutPipe[100],InPipe[100]; // 定義兩個字符數組
pipe(fd); // 創建管道
while((pid1 = fork( )) == -1); // 如果進程1創建不成功,則空循環
if(pid1 == 0) {
lockf(fd[1],1,0); // 鎖定管道
sprintf(OutPipe,"\n Child process 1 is sending message!\n");
write(fd[1],OutPipe,50); // 向管道寫入數據
sleep(5); // 等待讀進程讀出數據
lockf(fd[1],0,0); // 解除管道的鎖定
exit(0); // 結束進程1
}
else {
while((pid2 = fork()) == -1); // 若進程2創建不成功,則空循環
if(pid2 == 0) {
lockf(fd[1],1,0);
sprintf(OutPipe,"\n Child process 2 is sending message!\n");
write(fd[1],OutPipe,50);
sleep(5);
lockf(fd[1],0,0);
exit(0);
}
else {
wait(0);
代碼片段和文件信息
- 上一篇:符號表設計與實現
- 下一篇:Dubbo入門Demo
評論
共有 條評論