信号的发送
除了内核和超级用户,一般的进程只能向具有相同uid和gid的进程发送信号,或者是相同进程组的其他进程发送信号。
常见的发送信号函数,kill(), raise(), alarm(), setitimer(), abort()等。
1、kill()函数
可以给指定的进程发送某一个信号,函数原型
#include <sys/types.h>
#incluce <signal.h>
int kill(pid_t pid,int sig);
kill函数根据第一个形参的取值有不同的意义:
pid>0, 给PID为pid的进程发送信号。
pid=0,给同一个进程组的所有进程发送信号。
pid<0且pid!=-1,给进程组ID为-pid的所有进程发送信号。
pid=-1,给除了自身之外的PID大于1的进程发送信号。
第二个参数是要发送的信号值。为0时,不发送任何信号。
当kill()函数成功发送一个信号时,函数返回0,否则返回-1.。
错误检查:
EINVSL:所发送的信号无效。
EPERM:没有向目标进程发送信号的权限。
ESRCH:目标进程不存在或者已经终止,处于僵尸状态。