A. linux 如何結束進程
終止有問題的進程,並把進程的資源釋放給系統。然而,如果進程啟動了子進程,只殺死父進程,子進程仍在運行,因此仍消耗資源。為了防止這些所謂的「僵 首先使用ps -ef命令確定要殺死進程的PID,然後輸入以下命令: # kill -pid 注釋:標準的kill命令通常都能達到目的。終止有問題的進程,並把進程的資源釋放給系統。然而,如果進程啟動了子進程,只殺死父進程,子進程仍在運行,因此仍消耗資源。為了防止這些所謂的「僵屍進程」,應確保在殺死父進程之前,先殺死其所有的子進程。 *確定要殺死進程的PID或PPID # ps -ef | grep httpd結束進程# kill -l PID -l選項告訴kill命令用好像啟動進程的用戶已注銷的方式結束進程。當使用該選項時,kill命令也試圖殺死所留下的子進程。但這個命令也不是總能成功--或許仍然需要先手工殺死子進程,然後再殺死父進程。 給父進程發送一個TERM信號,試圖殺死它和它的子進程。 # kill -TERM PPID *killall命令 killall命令殺死同一進程組內的所有進程。其允許指定要終止的進程的名稱,而非PID。 # killall httpd *停止和重啟進程 有時候只想簡單的停止和重啟進程。如下: 該命令讓Linux和緩的執行進程關閉,然後立即重啟。在配置應用程序的時候,這個命令很方便,在對配置文件修改後需要重啟進程時就可以執行此命令。
B. linux 進程的幾種狀態
Linux內核中定義了以下幾種狀態:
#define TASK_RUNNING 0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define TASK_ZOMBIE 4
#define TASK_STOPPED 8
其中:
TASK_RUNNING是就緒態,進程當前只等待CPU資源。
TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE都是阻塞態,進程當前正在等待除CPU外的其他系統資源;前者可以被信號喚醒,後者不可以。
TASK_ZOMBIE是僵屍態,進程已經結束運行,但是進程式控制制塊尚未注銷。
TASK_STOPPED是掛起狀態,主要用於調試目的。進程接收到SIGSTOP信號後會進入該狀態,在接收到SIGCONT後又會恢復運行。
C. linux如何掛起某個進程,然後再恢復
kill命令帶-s參數用來向進程發送信號(SIG),可以用kill -l來查看信號說明。
D. Linux中進程的阻塞和掛起的區別
掛起就是暫停,有需要的時候在執行
後台執行就是繼續執行功能,但是不做交互了;
假設掛起web服務程序,他就不提供web訪問服務了;
後台執行web伺服器還是提供web訪問服務的,有些版本的系統,前台和後台執行佔用的資源優先順序由點區別;
你說這個有什麼相同之處呢?
E. Linux中怎麼終止正在運行的後台程序
xkill應用程序可以幫助你快速殺死你的桌面上的任何圖形窗口。
1、通過按下Ctrl + Alt + Esc鍵可激活此快捷方式。您的游標會變成一個X.點擊窗口與xkill功能來確定哪些進程與該窗口關聯,然後立即殺掉該進程。該窗口將瞬間關閉。
F. linux怎麼結束進程
如果是服務進程,systemctl stop 服務名稱
如果是其他進程 ps -ef|grep 進程名
然後執行 kill 進程pid
G. linux查看進程掛掉怎麼處理
所以,有時候對進程進行實時監控,當發現進程掛掉時,立刻重新啟動進程,也是一種可以救急的方式(當然這個只是一種臨時救急,並不是根本解決方法)。實現方式:使用fork()創建子進程,子進程用於執行具體功能,主進程只是用於監控子進程,當主進程檢測到子進程掛掉後,可以實現立即重新啟動子進程。
子進程結束,系統會向主進程發送信號:SIGCHLD,主進程可以通過捕捉該信號,從而檢測子進程已經不存在,進而繼續下一步操作。如果需要,主進程還可以獲得子進程是為何退出的。
H. linux下監控進程是否掛掉的一種方法
所以,有時候對進程進行實時監控,當發現進程掛掉時,立刻重新啟動進程,也是一種可以救急的方式(當然這個只是一種臨時救急,並不是根本解決方法)。
實現方式:使用fork()創建子進程,子進程用於執行具體功能,主進程只是用於監控子進程,當主進程檢測到子進程掛掉後,可以實現立即重新啟動子進程。
子進程結束,系統會向主進程發送信號:SIGCHLD,主進程可以通過捕捉該信號,從而檢測子進程已經不存在,進而繼續下一步操作。如果需要,主進程還可以獲得子進程是為何退出的。
源代碼例子:#include#include#include#include#include#include#includevoid process_exit(int s){exit(0);}void child_fun(){printf("child_fun. ppid %d\n",getppid());
char *st = NULL;
strcpy(st, "123");}void fork_child(){pid_t child_process;
int status;
int signal_num;
wait(&status);//等待子進程中斷或終止,釋放子進程資源,否則死掉的子進程會變成僵屍進程
//如果子進程是由於某種信號退出的,捕獲該信號
if(WIFSIGNALED(status))
signal_num = WTERMSIG(status);
child_process = fork();
if(child_process == 0){printf("fork new child process.\n");
child_fun();}}int main(){pid_t child_process;int i = 0;while(1){printf("fork new process.\n");
child_process = fork();
if(child_process > 0){while(1){//捕獲子進程結束信號
signal(SIGCHLD, fork_child);
signal(SIGTERM, process_exit);
pause();//主進程休眠,當有信號到來時被喚醒。}}else if(child_process == 0){child_fun();}}return 0;}僵屍進程的產生:
在fork()/execve()過程中,假設子進程結束時父進程仍存在,而父進程如果沒有給子進程收屍,死掉的子進程就變成僵屍進程了。僵屍進程是非常特殊的一種,它已經放棄了幾乎所有內存空間,沒有任何可執行代碼,也不能被調度,僅僅在進程列表中保留一個位置,記載該進程的退出狀態等信息供其他進程收集,除此之外,僵屍進程不再佔有任何內存空間,它需要它的父進程來為它收屍。僵屍進程,無法正常結束,此時即使是root身份kill-9也不能殺死僵屍進程。補救辦法是殺死僵屍進程的父進程(僵屍進程的父進程必然存在),僵屍進程成為"孤兒進程",過繼給1號進程init,init始終會負責清理僵屍進程。
僵屍進程的危害:
Linux系統對運行的進程數量有限制,如果產生過多的僵屍進程佔用了可用的進程號,將會導致新的進程無法生成。這就是僵屍進程對系統的最大危害。