-3 kill linux
2013-06-26 10:13:59 u010602695 阅读数 1580

linux的kill -3指令可以帮我们输出当前进程中所有线程的状态,如哪些线程在运行,哪些在等待,因为什么等待,代码哪一行等待。

kill -3 会将信息输出至控制台,所以使用时,被kill -3的进程最好是nohup启动的。


kill -3并不会影响程序运行,不用担心他把程序杀死了。

2010-07-29 14:00:00 xx77009833 阅读数 374

1. 函数说明:

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

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

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

他们的原型如下:

#include <signal.h>

int kill(pid_t pid, int signo);
int raise(int signo);

成功则返回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;
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/syc0616/archive/2009/01/14/3769350.aspx

2009-06-01 21:12:00 yylklshmyt20090217 阅读数 793

 1. 函数说明:

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

kill把信号发送给进程或进程组;

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

他们的原型如下:

#include <signal.h>

int kill(pid_t pid, int signo);
int raise(int signo);

成功则返回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仍执行正常的错误检查, 但不发送信号. 这被用来确定一个进程是否存在.

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dai_weitao/archive/2007/09/24/1798650.aspx

2007-09-24 16:23:00 dai_weitao 阅读数 8739

1. 函数说明:

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

kill把信号发送给进程或进程组;

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

他们的原型如下:

#include <signal.h>

int kill(pid_t pid, int signo);
int raise(int
 signo);

成功则返回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仍执行正常的错误检查, 但不发送信号. 这被用来确定一个进程是否存在.

2016-12-21 18:27:22 csdn_taojun 阅读数 175

首先了解什么是信号:信号是进程级的中断请求,系统定义了30余种信号,kill是管理员用来发送信号的一种手段。

功能说明:删除执行中的程序或工作。

语  法:kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
补充说明:kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或jobs指令查看。 
参  数:
 -l <信息编号>  若不加<信息编号>选项,则-l参数会列出全部的信息名称。 
 -s <信息名称或编号>  指定要送出的信息。 
 [程序]  [程序]可以是程序的PID或是PGID,也可以是工作编号。 

kill命令可以从kill这个词来大致了解下它的作用,是的,它用来杀死(kill)一个进程。下面是kill命令的详解。

1.作用 
kill命令用来中止一个进程。 

2.格式 
kill [ -s signal | -p ] [ -a ] pid ... 
kill -l [ signal ] 

3.参数 
-s:指定发送的信号。 
-p:模拟发送信号。 
-l:指定信号的名称列表。 
pid:要中止进程的ID号。 
Signal:表示信号。 

4.说明 
进程是Linux系统中一个非常重要的概念。Linux是一个多任务的操作系统,系统上经常同时运行着多个进程。我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务。 

Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。批处理进程和终端没有联系,是一个进程序列。监控进程(也称系统守护进程)时Linux系统启动时启动的进程,并在后台运行。例如,httpd是著名的Apache服务器的监控进程。 

kill命令的工作原理是,向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。 

5.应用实例 
(1)强行中止(经常使用杀掉)一个进程标识号为324的进程: 
#kill -9 324 

(2)解除Linux系统的死锁 
在Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。此时一般不用重新启动计算机,只需要中止(或者说是关闭)这个有问题的程序即可。当kill处于X-Window界面时,主要的程序(除了崩溃的程序之外)一般都已经正常启动了。此时打开一个终端,在那里中止有问题的程序。比如,如果Mozilla浏览器程序出现了锁死的情况,可以使用kill命令来中止所有包含有Mozolla浏览器的程序。首先用top命令查处该程序的 PID,然后使用kill命令停止这个程序: 
#kill -SIGKILL XXX 
其中,XXX是包含有Mozolla浏览器的程序的进程标识号。 

(3)使用命令回收内存 
我们知道内存对于系统是非常重要的,回收内存可以提高系统资源。kill命令可以及时地中止一些“越轨”的程序或很长时间没有相应的程序。例如,使用top命令发现一个无用 (Zombie) 的进程,此时可以使用下面命令: 
#kill -9 XXX 
其中,XXX是无用的进程标识号。 

然后使用下面命令: 
#free 
此时会发现可用内存容量增加了。 

(4)killall命令 
Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如: 
# killall -HUP inetd 

6.各种信号及其用途

复制代码
# kill -l
 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
 6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX    
复制代码

信号详解参考:http://www.cnblogs.com/oskb/p/3460089.html

7.其他实例

1)停止Tail进程然后重新启动它继续运行

复制代码
# ps -aux |grep tail
root     20664  0.0  0.0 100848   584 pts/1    S+   10:00   0:00 tail -f /var/log/messages
root     20666  0.0  0.0 103152   812 pts/2    S+   10:00   0:00 grep tail
# kill -s STOP 20664
# ps -aux |grep tail
root     20664  0.0  0.0 100848   584 pts/1    T    10:00   0:00 tail -f /var/log/messages
root     20668  0.0  0.0 103152   816 pts/2    S+   10:00   0:00 grep tail
# kill -s CONT 20664
# ps -aux |grep tail
root     20664  0.0  0.0 100848   584 pts/1    S    10:00   0:00 tail -f /var/log/messages
root     20686  0.0  0.0 103152   816 pts/2    S+   10:01   0:00 grep tail
复制代码

 

 8.注意事项

*杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志。 
首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: 
# kill -pid 
注释:标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。 
-------------------------------------------------------------------------------- 
*确定要杀死进程的PID或PPID 
# ps -ef | grep httpd 
*以优雅的方式结束进程 
# kill -l PID

-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总能成功--或许仍然需要先手工杀死子进程,然后再杀死父进程。 
-------------------------------------------------------------------------------- 

*TERM信号 
给父进程发送一个TERM信号,试图杀死它和它的子进程。 
# kill -TERM PPID 
-------------------------------------------------------------------------------- 
*killall命令 
killall命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID。 
# killall httpd 
-------------------------------------------------------------------------------- 
*停止和重启进程 
有时候只想简单的停止和重启进程。如下: 
# kill -HUP PID 
该命令让Linux和缓的执行进程关闭,然后立即重启。在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启进程时就可以执行此命令。 
-------------------------------------------------------------------------------- 
*绝杀 kill -9 PID 
同意的 kill -s SIGKILL 
这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。 
当使用此命令时,一定要通过ps -aux确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。


转自:http://www.cnblogs.com/oskb/p/3460080.html


kill linux

阅读数 25

linux:kill

阅读数 90

linux kill

阅读数 284

linux kill

阅读数 234

Linux Kill

阅读数 10

没有更多推荐了,返回首页