當前位置:首頁 » 操作系統 » killlinux函數

killlinux函數

發布時間: 2022-10-19 12:27:58

A. unix,linux環境編程中關於signal函數和kill函數問題

signal函數調用後會進入系統的信號隊列,具體什麼時候執行是不可控的。

B. Linux C函數Kill

你是程序中調用kill函數,還是在命令行調用kill命令?
int kill(pid_t pid, int sig); 函數有兩個參數,一個是進程號,一個是信號
如果你輸入的進程號是正確的,而進程還在,則信號有可能被該進程忽略了,不知道你發送的信號是幾號? 只有SIGKILL SIGSTOP不能被忽略,其它都可以忽略或捕捉。

C. linux中用kill函數給init進程發送一個終止信號有什麼後果

別容易出現問題。
pid=fork();
if(pid==0)
{
子進程處理....
}
else if(pid >0)
{
父進程處理....
}
else
fork出錯處理

把你的程序改成上述形式之後,
kill完了,檢查下kill的返回值,沒有錯誤。我換了一個信號,SIGUSR1,並且給它注冊了一個簡單的信號處理函數,問題就搞定了。
SIGCONT的默認的信號處理函數不知道是什麼,但是發送SIGCONT並不能讓子進程返回,除非手動的注冊一個信號處理函數。

你試試吧。。我簡單修改的程序,好像在子進程裡面exec沒反應,但exec沒錯:
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<signal.h>

void tasksighandler(int signalnum);

void init()
{
signal(SIGUSR1,tasksighandler);
printf("task is ready ...\n");
printf("task's pid= %d\n",getpid());
pause(); //子程序掛起
printf("task's restarted...\n");
int a=0;
for(a=0;a<10;a++)
{
printf("task is diong ...\n");
sleep(1);
}
execl("/bin/ls","ls",NULL);

perror("execl");
}

void tasksighandler(int signalnum)
{
printf("OK,catch the signal\n");
}

int main()
{
int i;
pid_t pid=0;
pid=fork();
if (pid == 0) /* 子進程執行此命令 */
{
signal(SIGUSR1,tasksighandler);
printf("task is ready ...\n");
//printf("task's pid= %d\n",getpid());
pause(); //子程序掛起
printf("task's restarted...\n");
int a=0;
for(a=0;a<5;a++)
{
printf("task is diong ...\n");
sleep(1);
}

}

else if(pid > 0)
{
printf("pid is %d\n",pid);

sleep(5);
int retCode=kill(pid,SIGUSR1); //父進程給子進程發送信號,要求子進程繼續運行
if(retCode <0)
{
perror("send signal error");
}

sleep(8);
return 0;
}

else
{
perror("fork error\n");
exit(-1);
}
}

下面是關於SIGCONT的一些說明,好像你這里使用的場合並不適合:
在 POSIX-服從的平台, SIGCONT 是 信號 送到再開始a 計算機程序 由早先停留 SIGSTOP 信號。 符號常數 為SIGCONT在被定義 標頭文件 signal.h. 符號信號名字,因為信號數字可能橫跨平台,變化使用。
用法

當 SIGSTOP 在它的現狀被送到過程,通常行為是停留那個過程。 如果送它SIGCONT信號,過程只將恢復施行。 SIGSTOP和SIGCONT使用為 作業控制 在 UNIX外殼程序在其他目的中。
另外,虛機團上產品團購,超級便宜

D. Linux 環境下的C語言, 關於 kill 發送信號和 signal() 函數, 具體問題在以下代碼的注釋處

pause()會令目前的進程暫停(進入睡眠狀態), 直到被信號(signal)所中斷。

當50信號觸動了,pause將退出睡眠狀態,執行printf和return

E. linux 中 kill() 與 signal() 函數

雖然子進程將父進程的函數重新拷貝了一份,子進程和父進程共享同一段內存空間,但不能被共享。可以通過共享內存解決這個問題。使用這個函數void* mmap(void * addr, size_t len, int prot, int flags, int fd, off_t offset)把進程地址空間映射為共享內存。addr為被映射的進程地址空間內存地址,取NULL表示由系統決定;len為被映射地址空間的長度;prot為內存映射區保護參數,通常取為PROT_READ|PROT_WRITE;flags為標志,通常取為MAP_SHARED|MAP_ANON;fd取為-1,offset取為0。成功返回被映射區的起始地址,失敗返回錯誤碼。需要的頭文件為:sys/mman.h。
使用方法:int * share; //假設要把share所指向的一個整型變數映射為共享內存空間。
share = (int *)mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, -1, 0 )這樣就能實現你說的 了.

F. 如何kill殺掉linux系統中的僵屍defunct進程

Linux 中如何殺掉僵屍進程 1) 檢查當前僵屍進程信息 # ps -ef | grep defunct | grep -v grep | wc -l 175 # top | head -2 top - 15:05:54 up 97 days, 23:49, 4 users, load average: 0.66, 0.45, 0.39 Tasks: 829 total, 1 running, 479 sleeping, 174 stopped, 175 zombie # ps -ef | grep defunct | grep -v grep 2) 獲得殺僵屍進程語句 # ps -ef | grep defunct | grep -v grep | awk '{print "kill -9 " $2,$3}' 執行上面獲得的語句即可, 使用信號量9, 僵屍進程數會大大減少. 3) 過一會兒檢查當前僵屍進程信息 # ps -ef | grep defunct | grep -v grep | wc -l 125 # top | head -2 top - 15:29:26 up 98 days, 12 min, 7 users, load average: 0.27, 0.54, 0.56 Tasks: 632 total, 1 running, 381 sleeping, 125 stopped, 125 zombie 發現僵屍進程數減少了一些, 但還有不少啊. 4) 再次獲得殺僵屍進程語句 # ps -ef | grep defunct | grep -v grep | awk '{print "kill -18 " $3}' 執行上面獲得的語句即可, 這次使用信

G. 在linux c編程里看到一句代碼:kill(func(), SIGHUP);func()是子函數,請問這句是什麼意思

func()函數返回一個進程ID,SIGHUP是signal信號中的一種處理方式,系統對SIGHUP信號的默認處理是終止收到該信號的進程。所以若程序中沒有捕捉該信號,當收到該信號時,進程就會退出。

H. Linux kill函數返回了1是什麼情況

返回1是沒有許可權
man 2 kill
可以查到kill函數的錯誤返回:EINVAL、EPERM和ESRCH
再看error.h里:
#define EPERM 1 /* Operation not permitted */

#define ESRCH 3 /* No such process */

#define EINVAL 22 /* Invalid argument */

I. Linux的kill函數和SIGUSR1信號。

對於這個信號而言,沒有信號響應函數的話,進程應該會異常終止,對於系統已有的信號一般都是有默認處理的,具體的我有點記不得了,搜下其實就知道了.我在網上找了下各信號默認處理方式,你看看吧,對你有沒有用
信號名稱 信號說明 默認處理
SIGABRT 由程序調用 abort時產生該信號。 程序異常結束。 進程終止並且產生core文件
SIGALRM timer到期, 有alarm或者setitimer 進程終止
SIGBUS 匯流排錯誤,地址沒對齊等。取決於具體硬體。 結束終止並產生core文件
SIGCHLD 進程停止或者終止時,父進程會收到該信號。 忽略該信號
SIGCONT 讓停止的進程繼續執行 繼續執行或者忽略
SIGFPE 算術運算異常,除0等。 進程終止並且產生core文件。
SIGHUP 終端關閉時產生這個信號 進程終止
SIGILL 代碼中有非法指令 進程終止並產生core文件
SIGINT 終端輸入了中斷字元ctrl+c 進程終止
SIGIO 非同步I/O,跟SIGPOLL一樣。 進程終止
SIGIOT 執行I/O時產生硬體錯誤 進程終止並且產生core文件
SIGKILL 這個信號用戶不能去捕捉它。 進程終止
SIGPIPE 往管道寫時,讀者已經不在了,或者往一個已斷開數據流socket寫數據。 進程終止
SIGPOLL 非同步I/O,跟SIGIO一樣。 進程終止
SIGPROF 有setitimer設置的timer到期引發 。 進程終止
SIGPWR Ups電源切換時 進程終止
SIGQUIT Ctrl+\,不同於SIGINT,這個是會產生core mp文件的。 進程終止並且產生core文件
SIGSEGV 內存非法訪問,默認列印出segment fault 進程終止並且產生core文件
SIGSTOP 某個進程停止執行,該信號不能被用戶捕捉。 進程暫停執行
SIGSYS 調用操作系統不認識的系統調用。 進程終止並且產生core文件
SIGTERM 有kill函數調用產生。 進程終止
SIGTRAP 有調試器使用,gdb 進程終止並且產生core文件
SIGTSTP Ctrl+z,掛起進程。 進程暫停
SIGTTIN 後台程序要從終端讀取成數據時。 進程暫停
SIGTTOU 後台終端要把數據寫到終端時。 進程暫停
SIGURG 一些緊急的事件,比如從網路收到帶外數據。 忽略
SIGUSR1 用戶自定義信號 進程終止
SIGUSR2 用戶自定義信號 進程終止
SIGVTALRM 有setitimer產生。 進程終止

J. 關於Linux中kill(),請大家看一哈

你的子進程沒有調用 signal 來設置它自己對應 SIGALM的處理函數,看看我改後的代碼,子進程調用了signal來設置信號處理函數。

子進程給父進程發信號後,父進程列印3秒後,會向子進程也發同一信號,子進程也能處理這個信號了。

#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
static int alarm_fired = 0;

void ding(int sig)
{
alarm_fired = 1;
}

int main()
{
pid_t pid;
printf("alarm application starting\n");
pid = fork();
switch(pid) {
case -1:
/* Failure */
perror("fork failed");
exit(1);
case 0:
/* child */
sleep(5);
(void) signal(SIGALRM, ding);
printf("Child send sig to parent\n");
kill(getppid(), SIGALRM);
pause();
if (alarm_fired) printf("Ding!\n");
printf("Child exit\n");
exit(0);
}

/* if we get here we are the parent process */
printf("waiting for alarm to go off\n");
(void) signal(SIGALRM, ding);
pause();
if (alarm_fired) printf("Ding!\n");
sleep(3);
printf("Parent send sig to child\n");
kill(pid, SIGALRM);
wait(NULL);
exit(0);
}

熱點內容
萊克發的工資卡密碼是多少 發布:2025-05-14 16:57:10 瀏覽:177
方舟怎麼用自己的存檔進入別人的伺服器 發布:2025-05-14 16:46:25 瀏覽:876
微博視頻高清上傳設置 發布:2025-05-14 16:38:41 瀏覽:548
資料庫圖書管理設計 發布:2025-05-14 16:33:52 瀏覽:378
php開發的網頁 發布:2025-05-14 16:22:03 瀏覽:477
伺服器內存跑滿了怎麼回事 發布:2025-05-14 16:21:16 瀏覽:224
微信qq音樂緩存 發布:2025-05-14 16:16:16 瀏覽:469
c語言回收內存 發布:2025-05-14 16:16:08 瀏覽:144
2021國產安卓頂級旗艦買哪個 發布:2025-05-14 16:15:36 瀏覽:300
linux自學視頻 發布:2025-05-14 16:14:49 瀏覽:256