kill() 函式詳解
[ KILL ]功能描述:
用於向任何程式組或程式傳送訊號。
1 #include <</span>sys/types.h>
2
3 #include <</span>signal.h>
4
5 int kill(pid_t pid, int sig);
6
2
3 #include <</span>signal.h>
4
5 int kill(pid_t pid, int sig);
6
引數:
pid:可能選擇有以下四種
1.pid>0時,pid是訊號欲送往的程式的標識。
2. pid=0時,訊號將送往所有與呼叫kill()的那個程式屬同一個使用組的程式。
3. pid=-1時,訊號將送往所有呼叫程式有權給其傳送訊號的程式,除了程式1(init)。
4. pid<-1時,訊號將送往以-pid為組標識的程式。
sig:準備傳送的訊號程式碼,假如其值為零則沒有任何訊號送出,但是系統會執行錯誤檢查,通常會利用sig值為零來檢驗某個程式是否仍在執行。
返回值說明:成功執行時,返回0。失敗返回-1,errno被設為以下的某個值 EINVAL:指定的訊號碼無效(引數 sig 不合法)EPERM;許可權不夠無法傳送訊號給指定程式 ESRCH:引數 pid 所指定的程式或程式組不存在
程式碼
1 #include <</span>sys/wait.h>
2 #include <</span>sys/types.h>
3 #include <</span>stdio.h>
4 #include <</span>stdlib.h>
5 #include <</span>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 [root@localhost src]# gcc killer.c
49 [root@localhost src]# ./a.out
50 In child process
51 4545 killed
2 #include <</span>sys/types.h>
3 #include <</span>stdio.h>
4 #include <</span>stdlib.h>
5 #include <</span>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 [root@localhost src]# gcc killer.c
49 [root@localhost src]# ./a.out
50 In child process
51 4545 killed
在確信fork呼叫成功後,子程式睡眠100秒,然後退出。
同時父程式在子程式上呼叫waitpid函式,但使用了WNOHANG選項(WNOHANG如果沒有任何已經結束的子程式則馬上返回,不予以等待),
所以呼叫waitpid後立即返回。父程式接著殺死子程式,如果kill執行失敗,
返回-1,否這返回0。如果kill執行失敗,父程式第二次呼叫waitpid,
保證他在子程式退出後再停止執行。否則父程式顯示一條成功訊息後退出。
相關文章
- 尤拉函式詳解函式
- malloc函式詳解函式
- ioctl()函式詳解函式
- gluLookAt 函式詳解函式
- fopencookie函式詳解Cookie函式
- 詳解Java函式式介面Java函式
- Socket send函式和recv函式詳解函式
- 建構函式詳解函式
- 函式引數詳解函式
- mysql常用函式詳解MySql函式
- 箭頭函式詳解函式
- fcntl函式用法詳解函式
- JavaScript函式模式詳解JavaScript函式模式
- eval()函式用法詳解函式
- Oracle 聚合函式詳解Oracle函式
- wait()函式詳解AI函式
- 詳解JavaScript函式模式JavaScript函式模式
- oracle TRANSLATE函式詳解Oracle函式
- select 函式詳解函式
- xslt函式詳解函式
- Oracle 分析函式詳解Oracle函式
- PHP函式處理函式例項詳解PHP函式
- linux之kill命令詳解Linux
- Oracle分析函式之開窗函式over()詳解Oracle函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- python socket函式詳解Python函式
- TypeScript中的函式詳解TypeScript函式
- 箭頭函式this指向詳解函式
- Java建構函式詳解Java函式
- vimscript-expand函式詳解函式
- Oracle單行函式詳解Oracle函式
- setdefaultencoding函式使用詳解Encoding函式
- 詳解C語言函式C語言函式
- PHP BC Math 函式詳解PHP函式
- getpid()函式用法詳解函式
- ORACLE to_char函式詳解Oracle函式
- oracle over函式 詳解(轉)Oracle函式
- PL/SQL單行函式和組函式詳解(轉)SQL函式