UNIX环境高级编程:进程管理和通信
常用信号 信号名:含义(默认操作) SIGHUP:该信号在用户终端连接(正常或非正常)结束时发出,通常是在终端的控制进程结束时,通知同一会话内的各个作业与控制终端不再关联。(终止) SIGINT:该信号在用户键入INTR字符(通常是Ctrl-C)时发出,终端驱动程序发送此信号并送到前台进程中的每一个进程。(终止) SIGQUIT:该信号和SIGINT类似,但由QUIT字符(通常是Ctrl-)来控制。(终止) SIGILL:该信号在一个进程企图执行一条非法指令时(可执行文件本身出现错误,或者试图执行数据段、堆栈溢出时)发出。(终止) SIGFPE:该信号在发生致命的算术运算错误时发出。这里不仅包括浮点运算错误,还包括溢出及除数为0等其它所有的算术的错误。(终止) SIGKILL:该信号用来立即结束程序的运行,并且不能被阻塞、处理和忽略。(终止) SIGALRM: 该信号当一个定时器到时的时候发出。(终止) SIGSTOP:该信号用于暂停一个进程,且不能被阻塞、处理或忽略。(暂停进程) SIGTSTP:该信号用于暂停交互进程,用户可键入SUSP字符(通常是Ctrl-Z)发出这个信号。(暂停进程) SIGCHLD :子进程改变状态时,父进程会收到这个信号。(忽略) SIGABORT :该信号用于结束进程。(终止) SIGUSR1(10) SIGUSR2(12) 保留给用户使用。 SIGKILL及SIGSTOP不能忽略、不能捕捉。 kill –l 命令查看系统支持的信号列表 信号相关的函数 网络的服务器模型里信号捕捉里将进程回收 waitpid(-1, NULL, WNOHANG); 发送信号 #include <signal.h> #include <sys/types.h> int kill( pid_t pid, int sig ); int raise( int sig ); 参数: pid: 正数:要接收信号的进程的进程号 0:信号被发送到所有和pid进程在同一个进程组的进程 -1:信号发给所有的进程表中的进程(除了进程号最大的进程外) sig:信号 返回值 成功:0 出错:-1 kill和raise的区别 可以发送信号给进程或进程组(实际上,kill系统命令只是kill函数的一个用户接口)。 raise函数允许进程向自己发送信号。 #include <unistd.h> unsigned int alarm( unsigned int seconds //指定秒数 ); 返回值 查看本栏目更多精彩内容:http://www.bianceng.cn/OS/unix/ 成功:如果调用此alarm()前,进程中已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0。 出错:-1 函数说明: 它在进程中设置一个定时器。当定时器指定的时间到时,内核就向进程发送SIGALARM信号,取消闹钟alarm(0); int pause(void) 返回值 -1,并且把error值设为EINTR。 函数说明: pause() 让进程睡眠,将当前进程处于等待态(可中断)直到有信号。 信号的处理 一个进程可以设定对信号的相应方式, 信号处理的主要方法有两种。 使用简单的signal()函数 使用信号集函数组 信号绑定函数: #include <signal.h> void ( *signal( int signum, void (*handler)(int)) )(int); 等价于: typedef void (fun)(int); fun * signal(signum, fun * handler) (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |