首页 > 试题广场 >

填写标记代码行的意义,给出功能描述和前 6行程序输出

[问答题]

填写标记代码行的意义,给出功能描述和前 6行程序输出。

#include <unistd.h>

#include <signal.h>

int ntimes=0;

main(int argc, char *argv[]) {

int pid,ppid;

int p_action( ), c_action( );

signal(SIGUSR1 , p_action);                            #(1)

switch(pid=fork( )) {                                #(2)

case -1: perror("fork failed?);

exit(1);

case 0: signal(SIGUSR1,c_action);

ppid=getppid( );

for ( ; ; ) ;

default: {

for( ; ; ) {

pause;

sleep(1);

kill(pid,SIGUSR1);                    #(3)

}

}

}

}

p_action( ) {

printf("parent caught signal #%d\n",++ntimes);

}

c_action( ) {

printf("child caught signal #%d\n",++ntimes/*, ++ltimes*/);

int ppid;

ppid = getppid();                                    #(4)

kill(ppid, SIGUSR1);

sleep(3);

}

答: #(1)在父进程中为信号SIGUSR1绑定函数p_action

#(2)创建子进程

#(3)向子进程发送信号SIGUSR1

#(4)获取父进程的PID

父进程无线循环向子进程发送信号,子进程收到信号后向父进程发送相同信号,父子进程之间各自记录全局变量的变化,结果如:

child caught signal #1

parent caught signal #1

child caught signal #2

parent caught signal #2

child caught signal #3

parent caught signal #3


发表于 2017-05-17 14:50:44 回复(0)