Linux Signal (3): kill和raise (转)

1. 函数说明:

kill和raise是用来发送信号的:

kill把信号发送给进程或进程组;(传送给制定的进程)

raise把信号发送给(进程)自身.

他们的原型如下:

#include<signal.h>intkill(pid_tpid,intsigno);intraise(intsigno);成功则返回0,出错则返回-1

从原型上可以看出, raise函数是可以通过kill实现的.

raise(signo);

等价于:

kill(getpid(), signo);

2. pid参数:

kill函数中的pid参数, 它有以下4种情况:

pid > 0: 将该信号发送给进程ID为pid的进程. pid == 0: 将该信号发送给与发送进程属于同一进程组的所有进程(不包括内核进程和init进程). 此时, 发送进程必须具有向这些进程发送信号的权限. pid < 0: 将该信号发给其进程组ID等于pid绝对值的所有进程(不包括内核进程和init进程). 此时, 发送进程必须具有向这些进程发送信号的权限. pid == -1: 将该信号发送给发送进程有权限向它们发送信号的系统上的所有进程.(不包括内核进程和init进程).

3. signo参数:

POSIX.1将编号为0的信号定义为空信号. 如果signo参数是0, 则kill仍执行正常的错误检查, 但不发送信号. 这被用来确定一个进程是否存在.

返回值:
执行成功则返回0, 如果有错误则返回-1。
例子:
#include <sys/types.h>#include <sys/wait.h>#include <stdio.h>#include <unistd.h>#include <signal.h>#include <stdio.h>int main(void){ pid_t pid; int stat; pid = fork();//创建进程if(pid < 0){ perror(“fork”); return 1; }/*子进程*/ else if(pid == 0){ printf(“I am child process./n”); sleep(10); return 0; }/*父进程*/ else{ printf(“Send signal to child process (%d)/n”, pid); sleep(1); kill(pid, SIGKILL); wait(&stat); if(WIFSIGNALED(stat)){//<sys/wait.h>定义的检查wait和waitpid所返回的 终止状态的宏,其中:WIFSIGNALED(stat),如果是异常终止子进程返回的状态则为真,WTERMSIG(stat)取使自3进程异常终止的信号编号。printf(“Child process received signal (%d)./n”, WTERMSIG(stat)); } } return 0;}
有人说,幸福是一种人生的感悟,一种个人的体验。

Linux Signal (3): kill和raise (转)

相关文章:

你感兴趣的文章:

标签云:

亚洲高清电影在线, 免费高清电影, 八戒影院夜间, 八戒电影最新大片, 出轨在线电影, 午夜电影院, 在线影院a1166, 在线电影院, 在线观看美剧下载, 日本爱情电影, 日韩高清电影在线, 电影天堂网, 直播盒子app, 聚合直播, 高清美剧, 高清美剧在线观看 EhViewer-E站, E站, E站绿色版, qqmulu.com, qq目录网, qq网站目录,