Linux
linux命令提示符
命令名稱:kill
使用許可權:所有使用者
使用方式:
kill [-s sigspec | -n signum | -sigspec] pid | jobspec … or kill -l [sigspec]
說明:kill 送出一個特定的信號 (signal) 給行程 id 為 pid 的行程根據該信號而做特定的動作,若沒有指定,預設是送出終止 (TERM) 的信號
-s (signal) : 其中常用的訊號有 HUP (1),KILL (9),TERM (15),分別代表著重跑,砍掉,結束; 詳細的信號可以用 kill -l (見下結果,可用數字帶入)
-p : 印出 pid,並不送出信號
-l (signal) : 列出所有可用的信號名稱
這個就是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
一般範例:
將 pid 為 323 的執行緒砍掉 (kill) :
kill -9 323
將 pid 為 456 的執行緒重跑 (restart) :
kill -HUP 456
一般來講,查詢PID的命令是
ps -ef | grep yum(表示查詢的是yum的PID,根據查詢的東西不同而異)。
舉一個實際的例子:
比方說,fedora的線上更新命令yum鎖鎖住了,常見的提示是
Existing lock /var/run/yum.pid: another copy is running as pid 19698.
Another app is currently holding the yum lock; waiting for it to exit…
Another app is currently holding the yum lock; waiting for it to exit…
Another app is currently holding the yum lock; waiting for it to exit…
Another app is currently holding the yum lock; waiting for it to exit…
Another app is currently holding the yum lock; waiting for it to exit…
…….
這裡就沒必要使用ps命令了,因為已經知道PID就是19698這個值了,因此不用在查詢。
這時就要使用kill將19698的進程殺死。其中的19698就是PID。
所以在命令行內輸入:
kill -9 19698
就能成功的殺死這個進程。
kill的改進用法如下:
一、把ps的查詢結果通過管道給grep查找包含特定字元串的進程。管道符“|”用來隔開兩個命令,管道符左邊命令的輸出會作為管道符右邊命令的輸入。
$ ps -ef | grep firefox
smx 1827 1 4 11:38 ? 00:27:33 /usr/lib/firefox-3.6.18/firefox-bin
smx 12029 1824 0 21:54 pts/0 00:00:00 grep –color=auto firefox
這次就清爽了。然後就是
$kill -s 9 1827
還是嫌打字多?
二、使用pgrep:
一看到pgrep首先會想到什麼?沒錯,grep!pgrep的p表明了這個命令是專門用於進程查詢的grep。
$ pgrep firefox
1827
看到了什麼?沒錯火狐的PID,接下來又要打字了:
$kill -s 9 1827
VB語句
kill({檔案地址(可不填)}+檔案名稱)
範例:kill "1.ini"
C函式
kill(傳送信號給指定的進程,使用 kill -l 命令可查看
linux系統中信號。)
相關函式 raise,signal
表頭檔案
#include<sys/types.h>
#include<signal.h>
定義函式 int kill(pid_t pid,int sig);
函式說明
kill()可以用來送參數sig指定的信號給參數pid指定的進程。參數pid有幾種情況:
pid>0 將信號傳給進程識別碼為pid 的進程。
pid=0 將信號傳給和當前進程相同
進程組的所有進程
pid=-1 將信號廣播傳送給系統內所有的進程
參數sig代表的信號:
Signal | Description |
SIGABRT | 由調用abort函式產生,進程非正常退出 |
SIGALRM | 用alarm函式設定的timer逾時或setitimer函式設定的interval timer逾時 |
SIGBUS | 某種特定的硬體異常,通常由記憶體訪問引起 |
SIGCANCEL | 由Solaris Thread Library內部使用,通常不會使用 |
SIGCHLD | 進程Terminate或Stop的時候,SIGCHLD會傳送給它的父進程。預設情況下該Signal會被忽略 |
SIGCONT | 當被stop的進程恢復運行的時候,自動傳送 |
SIGEMT | 和實現相關的硬體異常 |
SIGFPE | 數學相關的異常,如被0除,浮點溢出,等等 |
SIGFREEZE | Solaris專用,Hiberate或者Suspended時候傳送 |
SIGHUP | 傳送給具有Terminal的Controlling Process,當terminal被disconnect時候傳送 |
SIGILL | 非法指令異常 |
SIGINFO | BSD signal。由Status Key產生,通常是CTRL+T。傳送給所有Foreground Group的進程 |
SIGINT | 由Interrupt Key產生,通常是CTRL+C或者DELETE。傳送給所有ForeGround Group的進程 |
SIGIO | 異步IO事件 |
SIGIOT | 實現相關的硬體異常,一般對應SIGABRT |
SIGKILL | 無法處理和忽略。中止某個進程 |
SIGLWP | 由Solaris Thread Libray內部使用 |
SIGPIPE | 在reader中止之後寫Pipe的時候傳送 |
SIGPOLL | 當某個事件傳送給Pollable Device的時候傳送 |
SIGPROF | Setitimer指定的Profiling Interval Timer所產生 |
SIGPWR | 和系統相關。和UPS相關。 |
SIGQUIT | 輸入Quit Key的時候(CTRL+\)傳送給所有Foreground Group的進程 |
SIGSEGV | 非法記憶體訪問 |
SIGSTKFLT | Linux專用,數學協處理器的棧異常 |
SIGSTOP | 中止進程。無法處理和忽略。 |
SIGSYS | 非法系統調用 |
SIGTERM | 請求中止進程,kill命令預設傳送 |
SIGTHAW | Solaris專用,從Suspend恢復時候傳送 |
SIGTRAP | 實現相關的硬體異常。一般是調試異常 |
SIGTSTP | Suspend Key,一般是Ctrl+Z。傳送給所有Foreground Group的進程 |
SIGTTIN | 當Background Group的進程嘗試讀取Terminal的時候傳送 |
SIGTTOU | 當Background Group的進程嘗試寫Terminal的時候傳送 |
SIGURG | 當out-of-band data接收的時候可能傳送 |
SIGUSR1 | 用戶自定義signal 1 |
SIGUSR2 | 用戶自定義signal 2 |
SIGVTALRM | setitimer函式設定的Virtual Interval Timer逾時的時候 |
SIGWAITING | Solaris Thread Library內部實現專用 |
SIGWINCH | 當Terminal的視窗大小改變的時候,傳送給Foreground Group的所有進程 |
SIGXCPU | 當CPU時間限制逾時的時候 |
SIGXFSZ | 進程超過檔案大小限制 |
SIGXRES | Solaris專用,進程超過資源限制的時候傳送 |
返回值 執行成功則返回0,如果有錯誤則返回-1。
EINVAL 參數sig 不合法
ESRCH 參數pid 所指定的進程或進程組不存在
EPERM 許可權不夠無法傳送信號給指定進程
範例
#include<unistd.h>
#include<signal.h>
#include<sys/types.h>
#include<sys/wait.h>
main()
{
pid_t pid;
int status;
if(!(pid= fork())){
printf(“Hi I am child process!\n”);
sleep(10);
return;
}
else{
printf(“send signal to child process (%d) \n”,pid);
sleep(1);
kill(pid,SIGABRT);
wait(&status);
if(WIFSIGNALED(status))
printf(“chile process receive signal %d\n”,WTERMSIG(status));
}
}
執行 sen signal to child process(3170)
Hi I am child process!
child process receive signal 6
防毒軟體
KILL 網路防病毒系統(別名“ KILL 安全胄甲”)是冠群金辰公司旗下的企業級防病毒軟體,可全面查殺
計算機病毒、
蠕蟲、木馬等惡意程式,保護用戶網路範圍內
計算機系統環境安全。KILL
防病毒系統採用
自主智慧財產權的防病毒引擎,依託
美國 CA 公司強大的技術背景和國內雄厚的研發服務實力,在十幾年的發展中,贏得了廣大用戶的普遍信任,其產品在政府、電信、金融、稅務等各個領域都有著廣泛的成功套用。
KILL 網路防病毒系統支持在 Windows 9x/ME/NT/2000/XP/2003/Vista 等平台上運行,同步支持
微軟 Windows
作業系統的各個版本。KILL
防病毒引擎榮獲
西海岸實驗室( West Coast Labs )基於 Windows Vista 平台的 Checkmark 權威認證,屬全球首家,確保在 Vista 平台上穩定運行;首批榮獲國際病毒公告牌( Virus Bulletin ) Windows Vista 平台病毒查殺 VB100 認證,可 100% 查殺 Vista 系統上的流行病毒。