資源簡(jiǎn)介
(1)進(jìn)程的軟中斷通信
#include
#include
#include
#include
int wait_flag;
void stop();
main( ) {
int pid1, pid2; // 定義兩個(gè)進(jìn)程號(hào)變量
signal(2,stop); // 或者 signal (14,stop);
while((pid1 = fork( )) == -1); // 若創(chuàng)建子進(jìn)程1不成功,則空循環(huán)
if(pid1 > 0) { // 子進(jìn)程創(chuàng)建成功,pid1為進(jìn)程號(hào)
while((pid2 = fork( )) == -1); // 創(chuàng)建子進(jìn)程2
if(pid2 > 0) {
wait_flag = 1;
//sleep(1); // 父進(jìn)程等待5秒
kill(pid1,SIGUSR1); // 殺死進(jìn)程1
kill(pid2,SIGUSR2); // 殺死進(jìn)程2
wait(0);
wait(0);
printf("\n Parent process is killed !!\n");
exit(0); // 父進(jìn)程結(jié)束
}
else {
wait_flag = 1;
signal(SIGUSR2,stop); // 等待進(jìn)程2被殺死的中斷號(hào)17
printf("\n Child process 2 is killed by parent !!\n");
exit(0);
}
}
else
{
wait_flag = 1;
signal(SIGUSR1,stop); // 等待進(jìn)程1被殺死的中斷號(hào)16
printf("\n Child process 1 is killed by parent !!\n");
exit(0);
}
}
void stop() {
wait_flag = 0;
}
(2)進(jìn)程的管道通信
#include
#include
#include
int pid1,pid2; // 定義兩個(gè)進(jìn)程變量
main( ) {
int fd[2];
char OutPipe[100],InPipe[100]; // 定義兩個(gè)字符數(shù)組
pipe(fd); // 創(chuàng)建管道
while((pid1 = fork( )) == -1); // 如果進(jìn)程1創(chuàng)建不成功,則空循環(huán)
if(pid1 == 0) {
lockf(fd[1],1,0); // 鎖定管道
sprintf(OutPipe,"\n Child process 1 is sending message!\n");
write(fd[1],OutPipe,50); // 向管道寫(xiě)入數(shù)據(jù)
sleep(5); // 等待讀進(jìn)程讀出數(shù)據(jù)
lockf(fd[1],0,0); // 解除管道的鎖定
exit(0); // 結(jié)束進(jìn)程1
}
else {
while((pid2 = fork()) == -1); // 若進(jìn)程2創(chuàng)建不成功,則空循環(huán)
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);
代碼片段和文件信息
評(píng)論
共有 條評(píng)論