Linux下Kill函数用法


http://www.cnblogs.com/winnxm/archive/2010/01/22/1654502.html
[ KILL ]功能描述:

用于向任何进程组或进程发送信号。

1 #include <sys/types.h>
2
3 #include <signal.h>
4
5 int kill(pid_t pid, int sig);
6
7

参数:
pid:可能选择有以下四种
1. pid大于零时,pid是信号欲送往的进程的标识。
2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。
3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。
4. pid小于-1时,信号将送往以-pid为组标识的进程。
sig:准备发送的信号代码,假如其值为零则没有任何信号送出,但是系统会执行错误检查,通常会利用sig值为零来检验某个进程是否仍在执行。
返回值说明: 成功执行时,返回0。失败返回-1,errno被设为以下的某个值 EINVAL:指定的信号码无效(参数 sig 不合法) EPERM;权限不够无法传送信号给指定进程 ESRCH:参数 pid 所指定的进程或进程组不存在
代码
1 #include <sys/wait.h>
2 #include <sys/types.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <signal.h>
6
7 int main( void )
8 {
9 pid_t childpid;
10 int status;
11 int retval;
12
13 childpid = fork();
14 if ( -1 == childpid )
15 {
16 perror( "fork()" );
17 exit( EXIT_FAILURE );
18 }
19 else if ( 0 == childpid )
20 {
21 puts( "In child process" );
22 sleep( 100 );//让子进程睡眠,看看父进程的行为
23 exit(EXIT_SUCCESS);
24 }
25 else
26 {
27 if ( 0 == (waitpid( childpid, &status, WNOHANG )))
28 {
29 retval = kill( childpid,SIGKILL );
30
31 if ( retval )
32 {
33 puts( "kill failed." );
34 perror( "kill" );
35 waitpid( childpid, &status, 0 );
36 }
37 else
38 {
39 printf( "%d killed\n", childpid );
40 }
41
42 }
43 }
44
45 exit(EXIT_SUCCESS);
46 }
47 //-----------------
48 [[email protected] src]# gcc killer.c
49 [[email protected] src]# ./a.out
50 In child process
51 4545 killed
在确信fork调用成功后,子进程睡眠100秒,然后退出。
同时父进程在子进程上调用waitpid函数,但使用了WNOHANG选项(WNOHANG如果没有任何已经结束的子进程则马上返回,不予以等待),
所以调用waitpid后立即返回。父进程接着杀死子进程,如果kill执行失败,
返回-1,否这返回0。如果kill执行失败,父进程第二次调用waitpid,
保证他在子进程退出后再停止执行。否则父进程显示一条成功消息后退出。

Linux下Kill函数用法,码迷,mamicode.com

时间: 2024-10-15 09:39:34

Linux下Kill函数用法的相关文章

Linux下find函数用法汇总

打开find函数介绍,我们可以看到find函数的用途及其参数列表: 可以看到find函数的作用是通过目录的层次结构查找文件并且返回文件路径+文件到控制台输出.使用方法汇总如下: 命令参数及exec/ok执行shell指令: pathname: find命令所查找的目录路径.例如用.来表示当前目录,用/来表示系统根目录. -print: find命令将匹配的文件输出到标准输出. -exec: find命令对匹配的文件执行该参数所给出的shell命令.相应命令的形式为'command' {} \;,

对于linux下system()函数的深度理解(整理)

对于linux下system()函数的深度理解(整理) (2013-02-07 08:58:54) 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以为是其他的代码影响到这个,或是内核驱动文件系统什么的异常导致,昨天有出现了这个问题,就随手百了一下度,问题出现了,很多人都说system()函数要慎用要少用要能不用则不用,system()函数不稳定?

【C/C++】Linux下system()函数引发的错误

http://my.oschina.net/renhc/blog/54582 [C/C++]Linux下system()函数引发的错误 恋恋美食  恋恋美食 发布时间: 2012/04/21 11:33 阅读: 11393 收藏: 21 点赞: 8 评论: 4 今天,一个运行了近一年的程序突然挂掉了,问题定位到是system()函数出的问题,关于该函数的简单使用在我上篇文章做过介绍: http://my.oschina.net/renhc/blog/53580 先看一下问题 简单封装了一下sys

Linux下select函数的使用

Linux下select函数的使用 转载:http://www.cnblogs.com/hjslovewcl/archive/2011/03/16/2314330.html 一.Select 函数详细介绍 Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect. accept.recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发 生,

Linux下system()函数引发的错误

先看一下问题 简单封装了一下system()函数: 1 int pox_system(const char *cmd_line) 2 { 3     return system(cmd_line); 4 } 函数调用: 1 int ret = 0; 2 ret = pox_system("gzip -c /var/opt/I00005.xml > /var/opt/I00005.z"); 3 if(0 != ret) 4 { 5     Log("zip file fa

[Android Memory] Linux下malloc函数和OOM Killer

http://www.linuxidc.com/Linux/2010-09/28364.htm Linux下malloc函数主要用来在用户空间从heap申请内存,申请成功返回指向所分配内存的指针,申请失败返回NULL.默认情况下,Linux内核使用“乐观的”分配内存策略,首先粗略估计系统可使用的内存数,然后分配内存,但是在使用的时候才真正把这块分配的内存给你.这样一来,即使用malloc申请内存没有返回NULL,你也不一定能完全使用这块内存,特别是在一次或连续多次申请很多内存的时候. 如果一直连

Linux下system函数

http://www.jb51.net/article/40517.htm   浅析如何在c语言中调用Linux脚本 http://blog.csdn.net/koches/article/details/7552034 C语言system()函数 http://blog.csdn.net/lazy_tiger/article/details/1771705 System函数与脚本的后台执行 Linux下system函数

Linux下c函数dlopen实现加载动态库so文件代码举例

dlopen()是一个强大的库函数.该函数将打开一个新库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了.可以在自己的程序中使用 dlopen().dlopen() 在 dlfcn.h 中定义,并在 dl 库中实现.它需要两个参数:一个文件名和一个标志.文件名就是一个动态库so文件,标志指明是否立刻计算库的依赖性.如果设置为 RTLD_NOW 的话,则立刻计算:如果设置的是 RTLD_LAZY,则在需要

linux下sprintf_s函数的替代(转载)

转自:http://www.cnblogs.com/yeahgis/archive/2013/01/22/2872179.html windows平台下线程安全的格式化字符串函数sprint_s并非标准C函数,因此linux下无法使用,但可以使用snprintf函数代替. /*函数原型:*/ int snprintf(char *dest, size_t n, const char *fmt, ...); /*函数说明: 最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0.所以如果目标