當前位置:首頁 » 操作系統 » linux進程實例

linux進程實例

發布時間: 2022-05-21 12:34:03

linux系統中的進程分為那兩類,分別以什麼方式啟動。並舉例說明

Linux系統中的進程分為:獨立守護進程和被動守護進程。 獨立守護進程由相應的獨立啟動,而被動守護進程由Xinetd服務監聽啟動。 例如:郵件伺服器配置守護進程sendmail就是獨立守護進程,可以用service命令啟動,而pop3協議就以被動守護進程方式啟動,需要修改/etc/xinetd.d目錄下的相應守護進程文件ipop3,再重新啟動xinetd的方式啟動。

⑵ linux如何查看一個進程下有哪些線程 求具體例子

對於Linux,其實他是不存在線程這一說的,只有進程,如果非要說線程的話 ,

你可以pstree -c|grep 你想要的進程的線程
比如nginx的:
ps -ef|grep nginx 可以看到Nginx的所有進程
pstree -c |grep nginx
可以看到對應的線程

⑶ Linux裡面殺掉進程命令是什麼

方法一: Terminal終端輸入: gnome-system-monitor,就可以打開system monitor

如圖:

然後找到相應進程,右擊選擇kill process就可以了

方法二: 通過kill 進程id的方式可以實現,

首先需要知道進程id, 例如,想要殺死firefox的進程,通過 ps -ef|grep firefox,可以查到firefox的進程id:

然後通過 kill 3781 就可以關閉進程了.

補充: 1. kill -9 來強制終止退出, 例如: kill -9 3781

2.特殊用法:

kill -STOP [pid]
發送SIGSTOP (17,19,23)停止一個進程,而並不消滅這個進程。
kill -CONT [pid]
發送SIGCONT (19,18,25)重新開始一個停止的進程。
kill -KILL [pid]
發送SIGKILL (9)強迫進程立即停止,並且不實施清理操作。
kill -9 -1
終止你擁有的全部進程。

方法三: killall 通過程序的名字,來殺死進程

例如: killall firefox
注意: 該命令可以使用 -9 參數來強制殺死進程, killall -9 firefox

方法四: pkill 通過程序的名字, 直接殺死所有進程
例如: pkill firefox

方法五: 通過xkill 可以殺死圖形程序應用, 例如firefox崩潰無響應,可以使用該命令.
例如: 用法xkill , 會出現一個白色的x, 然後用滑鼠單擊想要殺死的應用,如圖

以下內容引用自: http://justcoding.iteye.com/blog/1931347

◆編者註:
KILLALL(Section: User (1)/Updated: 1999年9月7日)
———————————————–

NAME (名稱)
killall – 以名字方式來殺死進程

SYNOPSIS (總覽)
killall [-egiqvw] [-signal] name …
killall -l
killall -V

DESCRIPTION (描述)
killall 發送一條信號給所有運行任意指定命令的進程. 如果沒有指定信號名, 則發送SIGTERM.。
信號可以以名字 (如 -HUP ) 或者數字 (如 -1 ) 的方式指定. 信號 0 (檢查進程是否存在)只能以數字方式指定。
如果命令名包括斜杠 (/), 那麼執行該特定文件的進程將被殺掉, 這與進程名無關。
如果對於所列命令無進程可殺, 那麼 killall 會返回非零值. 如果對於每條命令至少殺死了一個進程, killall 返回 0。Killall 進程決不會殺死自己 (但是可以殺死其它 killall 進程)。

OPTIONS (選項)
-e
對 於很長的名字, 要求准確匹配. 如果一個命令名長於 15 個字元, 則可能不能用整個名字 (溢出了). 在這種情況下, killall 會殺死所有匹配名字前 15 個字元的所有進程. 有了 -e 選項,這樣的記錄將忽略. 如果同時指定了 -v 選項, killall 會針對每個忽略的記錄列印一條消息。
-g
殺死屬於該進程組的進程. kill 信號給每個組只發送一次, 即使同一進程組中包含多個進程。
-i
交互方式,在殺死進程之前徵求確認信息。
-l
列出所有已知的信號名。
-q
如果沒有進程殺死, 不會提出抱怨。
-v
報告信號是否成功發送。
-V
顯示版本信息。
-w
等待所有殺的進程死去. killall 會每秒檢查一次是否任何被殺的進程仍然存在, 僅當都死光後才返回. 注意: 如果信號被忽略或沒有起作用, 或者進程停留在僵屍狀態, killall 可能會永久等待。
FILES(相關文件)
/proc proc文件系統的存在位置。
KNOWN bugS (已知 BUGS)
以文件方式殺死只對那些在執行時一直打開的可執行文件起作用, 也即, 混雜的可執行文件不能夠通過這種方式殺死。
要警告的是輸入 killall name 可能不會在非 Linux 系統上產生預期的效果, 特別是特權用戶執行時要小心。
在兩次掃描的間隙, 如果進程消失了而被代之以一個有同樣 PID 的新進程, killall -w 偵測不到。

來源:http://www.ubuntuhome.com/ubuntu-kill-command.html

下面來了解相關命令:

一、查看進程的命令 有ps、pstree、pgrep等:

1、ps
顯示進程信息,參數可省略
-aux 以BSD風格顯示進程 常用
-efH 以System V風格顯示進程
-e , -A 顯示所有進程
a 顯示終端上所有用戶的進程
x 顯示無終端進程
u 顯示詳細信息
f 樹狀顯示
w 完整顯示信息
l 顯示長列表

在終端中執行ps aux,
各列輸出欄位的含義:

USER 進程所有者
PID 進程ID
PPID 父進程
%CPU CPU佔用率
%MEM 內存佔用率
NI 進程優先順序。數值越大,佔用CPU時間越少
VSZ 進程虛擬大小
RSS 頁面文件佔用
TTY 終端ID
STAT 進程狀態
+---D 不可中斷 Uninterruptible sleep (usually IO)
+---R 正在運行,或在隊列中的進程
+---S 處於休眠狀態
+---T 停止或被追蹤
+---Z 僵屍進程
+---W 進入內存交換(從內核2.6開始無效)
+---X 死掉的進程

+---< 高優先順序
+---N 低優先順序
+---L 有些頁被鎖進內存
+---s 包含子進程
+---+ 位於後台的進程組;
+---l 多線程,克隆線程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

PID:進程標識符,系統為每一個進程分配一個識別碼,稱為PID。

ps命令極為常用,其他命令還有:

2.pstree
樹狀顯示進程信息
-a 顯示完整命令及參數
-c 重復進程分別顯示
-c 顯示進程ID PID
-n 按 PID 排列進程

3.pgrep <進程名>
顯示進程的PID
-l 顯示進程名和進程PID
-o 進程起始ID
-n 進程終止ID

二、結束進程的命令 有kill、pkill、killall、xkill等:

kill [信號代碼] <進程PID>

根據PID向進程發送信號,常用來結束進程,默認信號為 -9
信號代碼,可取值如下:
-l [信號數字] 顯示、翻譯信號代碼
-9 , -KILL 發送 kill 信號退出
-6 , -ABRT 發送 abort 信號退出
-15 , -TERM 發送 Termination 信號
-1 , -HUP 掛起
-2 , -INT 從鍵盤中斷,相當於 Ctrl+c
-3 , -QUIT 從鍵盤退出,相當於 Ctrl+d
-4 , -ILL 非法指令
-11 , -SEGV 內存錯誤
-13 , -PIPE 破壞管道
-14 , -ALRM
-STOP 停止進程,但不結束
-CONT 繼續運行已停止的進程
-9 -1 結束當前用戶的所有進程

pkill <進程名>
結束進程族。如果結束單個進程,請用 kill

killall <進程名>
killall和pkill 應用方法差不多,也是直接殺死運行中的程序;如果您想殺掉單個進程,請用kill 來殺掉。

xkill
在圖形界面中點殺進程。
當xkill運行時滑鼠指針變為骷髏圖案,哪個圖形程序崩潰一點就OK了。如果您想終止xkill ,就按右鍵取消。
比如當firefox 出現崩潰不能退出時,點滑鼠就能殺死firefox 。
xkill 調用方法:
[root@localhost ~]# xkill

來源: http://www.cnblogs.com/1024-wusuopuBUPT/archive/2012/02/16/2354132.html

linux中pkill的簡單用法

pkill 和killall 應用方法差不多,也是直接殺死運行中的程序;如果您想殺掉單個進程,請用kill 來殺掉。

必要參數
-f 顯示完整程序
-l 顯示源代碼
-n 顯示新程序
-o 顯示舊程序
-v 與條件不符合的程序
-x 與條件符合的程序

選擇參數
-p<進程號> 列出父進程為用戶指定進程的進程信息
-t<終端> 指定終端下的所有程序
-u<用戶> 指定用戶的程序

應用方法:

#pkill 正在運行的程序名

舉例:

Java代碼
[root@localhost beinan]# pgrep -l gaim
2979 gaim
[root@localhost beinan]# pkill gaim

也就是說:

kill 對應的是 PID

pkill 對應的是COMMAND

例如在Ubuntu中強制結束一個已成僵屍的名稱為:firefox,PID為:1603的進程,可以如下操作:

方法一:

(1)ctrl+alt+t,調出終端,輸入 top,然後就可以看到現在系統的進程,是按佔用資源從多到少排列的。

找到要關掉的進程,記下該進程第一列的數字編號(假設是xx),然後輸入q,退回終端。

(2)輸入:sudo kill xx(對應剛才的編號)。

方法二:

ctrl+alt+t,調出終端,輸入:sudo pkill firefox

範例1: 殺死指定進程

Java代碼
root@snail-hnlinux:~# ps -A //顯示所有進程
PID TTY TIME CMD
1 ? 00:00:03 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
……忽略部分
28382 ? 00:00:00 gvfsd-http
28391 ? 00:07:07 software-center
30467 ? 00:00:31 designer-qt4
30487 ? 00:00:06 gnome-terminal
30488 ? 00:00:00 gnome-pty-helpe
30489 pts/0 00:00:00 bash
30670 ? 00:00:00 debconf-communi
30749 pts/0 00:00:17 gedit
31155 ? 00:00:00 dhclient
31325 ? 00:00:01 sshd
31327 ? 00:00:00 sshd
31400 pts/1 00:00:00 bash
31485 pts/2 00:00:00 bash
3 ? 00:00:00 aptd
31658 pts/1 00:00:00 ps
root@snail-hnlinux:~# pidof sshd //查看與sshd相關進程
31327 31325 2095
root@snail-hnlinux:~# pkill -9 sshd //殺死指定進程

範例2:殺死同義終端下的進程

Java代碼
root@snail-hnlinux:~# pkill -t tty1 //殺死終端1下的所有進程

範例3: 殺死指定用戶進程

Java代碼
root@snail-hnlinux:~# pkill -u hnlinux

範例4:反向選擇

Java代碼
root@snail-hnlinux:~# pkill -vu hnlinux //殺死不屬於hnlinux用戶的所有進程

————————————————
版權聲明:本文為CSDN博主「MrCoderr」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/coderder/article/details/78899823

⑷ Linux實驗 創建進程

這是 偽代碼 ,read()需要你擴展
pid_t pid;
pid = fork();
if(pid ==0){
read();
exit(0);
}
else{
wait(NULL);
……
}

⑸ Linux進程調度的舉例

[例25] 殺掉進程11721
# ps PID TTY TIME COMMAND
11668 p1 00:00:00 -tcsh
11721 p1 00:00:00 cat
11737 p1 00:00:00 ps
# kill 11721
[1] Terminated cat
#
有時候可能會遇到這樣的情況,某個進程已經掛死或閑置,使用kill命令卻殺不掉。這時候就必須發送信號9,強行關閉此進程。當然這種「野蠻」的方法很可能會導致打開的文件出現錯誤或者數據丟失之類的錯誤。所以不到萬不得已不要使用強制結束的辦法。如果連信號9都不響應,那恐怕就只有重新啟動計算機了。

⑹ 在Linux中怎麼讓程序只運行一個實例

比如用/tmp/ins這個路徑

啟動時檢查這個路徑是否存在,存在就說明已經有實例在運行,否則就沒有實例運行,創建這么一個文件,退出時刪除這個文件。

這個是Linux下的一般做法

⑺ linux 父進程創建子進程的例子

父進程為什麼要創建子進程呢?前面我們已經說過了Linux是一個多用戶操作系統,在同一時間會有許多的用戶在爭奪系統的資源.有時進程為了早一點完成任務就創建子進程來爭奪資源. 一旦子進程被創建,父子進程一起從fork處繼續執行,相互競爭系統的資源.有時候我們希望子進程繼續執行,而父進程阻塞直到子進程完成任務.這個時候我們可以調用wait或者waitpid系統調用.
#i nclude
#i nclude

pid_t wait(int *stat_loc);
pid_t waitpid(pid_t pid,int *stat_loc,int options);

wait系統調用會使父進程阻塞直到一個子進程結束或者是父進程接受到了一個信號.如果沒有父進程沒有子進程或者他的子進程已經結束了wait回立即返回.成功時(因一個子進程結束)wait將返回子進程的ID,否則返回-1,並設置全局變數errno.stat_loc是子進程的退出狀態.子進程調用exit,_exit 或者是return來設置這個值. 為了得到這個值Linux定義了幾個宏來測試這個返回值.
WIFEXITED:判斷子進程退出值是非0
WEXITSTATUS:判斷子進程的退出值(當子進程退出時非0).
WIFSIGNALED:子進程由於有沒有獲得的信號而退出.
WTERMSIG:子進程沒有獲得的信號號(在WIFSIGNALED為真時才有意義).
waitpid等待指定的子進程直到子進程返回.如果pid為正值則等待指定的進程(pid).如果為0則等待任何一個組ID和調用者的組ID相同的進程.為-1時等同於wait調用.小於-1時等待任何一個組ID等於pid絕對值的進程. stat_loc和wait的意義一樣. options可以決定父進程的狀態.可以取兩個值 WNOHANG:父進程立即返回當沒有子進程存在時. WUNTACHED:當子進程結束時waitpid返回,但是子進程的退出狀態不可得到.
父進程創建子進程後,子進程一般要執行不同的程序.為了調用系統程序,我們可以使用系統調用exec族調用.exec族調用有著5個函數.
#i nclude

int execl(const char *path,const char *arg,…);
int execlp(const char *file,const char *arg,…);
int execle(const char *path,const char *arg,…);
int execv(const char *path,char *const argv[]);
int execvp(const char *file,char *const argv[]):

exec族調用可以執行給定程序.關於exec族調用的詳細解說可以參考系統手冊(man execl). 下面我們來學習一個實例.注意編譯的時候要加 -lm以便連接數學函數庫.

#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude

void main(void)
{
pid_t child;
int status;

printf(」This will demostrate how to get child status\n」);
if((child=fork())==-1)
{
printf(」Fork Error :%s\n」,strerror(errno));
exit(1);
}
else if(child==0)
{
int i;
printf(」I am the child:%ld\n」,getpid());
for(i=0;i<1000000;i++) sin(i);
i=5;
printf(」I exit with %d\n」,i);
exit(i);
}
while(((child=wait(&status))==-1)&(errno==EINTR));
if(child==-1)
printf(」Wait Error:%s\n」,strerror(errno));
else if(!status)
printf(」Child %ld terminated normally return status is zero\n」,
child);
else if(WIFEXITED(status))
printf(」Child %ld terminated normally return status is %d\n」,
child,WEXITSTATUS(status));
else if(WIFSIGNALED(status))
printf(」Child %ld terminated e to signal %d znot caught\n」,
child,WTERMSIG(status));
}

strerror函數會返回一個指定的錯誤號的錯誤信息的字元串.

⑻ 如何編寫linux daemon進程

守護進程的編程要點 :1. 在後台運行。
為避免掛起控制終端將Daemon放入後台執行。方法是在進程中調用fork使父進程終止,讓Daemon在子進程中後台執行。

if(pid=fork())
exit(0);//是父進程,結束父進程,子進程繼續
2. 脫離控制終端,登錄會話和進程組

有必要先介紹一下Linux中的進程與控制終端,登錄會話和進程組之間的關系:進程屬於一個進程組,進程組號(GID)就是進程組長的進程號(PID)。登錄會話可以包含多個進程組。這些進程組共享一個控制終端。這個控制終端通常是創建進程的登錄終端。

控制終端,登錄會話和進程組通常是從父進程繼承下來的。我們的目的就是要擺脫它們,使之不受它們的影響。方法是在第1點的基礎上,調用setsid()使進程成為會話組長:

setsid();
說明:當進程是會話組長時setsid()調用失敗。但第一點已經保證進程不是會話組長。setsid()調用成功後,進程成為新的會話組長和新的進程組長,並與原來的登錄會話和進程組脫離。由於會話過程對控制終端的獨占性,進程同時與控制終端脫離。
3. 禁止進程重新打開控制終端
現在,進程已經成為無終端的會話組長。但它可以重新申請打開一個控制終端。可以通過使進程不再成為會話組長來禁止進程重新打開控制終端:

if(pid=fork())

exit(0);//結束第一子進程,第二子進程繼續(第二子進程不再是會話組長)

4. 關閉打開的文件描述符
進程從創建它的父進程那裡繼承了打開的文件描述符。如不關閉,將會浪費系統資源,造成進程所在的文件系統無法卸下以及引起無法預料的錯誤。按如下方法關閉它們:

for(i=0;i 關閉打開的文件描述符close(i);>

5. 改變當前工作目錄
進程活動時,其工作目錄所在的文件系統不能卸下。一般需要將工作目錄改變到根目錄。對於需要轉儲核心,寫運行日誌的進程將工作目錄改變到特定目錄如/tmpchdir("/")

6. 重設文件創建掩模
進程從創建它的父進程那裡繼承了文件創建掩模。它可能修改守護進程所創建的文件的存取位。為防止這一點,將文件創建掩模清除:umask(0);

7. 處理SIGCHLD信號
處理SIGCHLD信號並不是必須的。但對於某些進程,特別是伺服器進程往往在請求到來時生成子進程處理請求。如果父進程不等待子進程結束,子進程將成為 僵屍進程(zombie)從而佔用系統資源。如果父進程等待子進程結束,將增加父進程的負擔,影響伺服器進程的並發性能。在Linux下可以簡單地將 SIGCHLD信號的操作設為SIG_IGN。

signal(SIGCHLD,SIG_IGN);
這樣,內核在子進程結束時不會產生僵屍進程。這一點與BSD4不同,BSD4下必須顯式等待子進程結束才能釋放僵屍進程。

⑼ 操作系統管理Linux 系統進程實驗報告

什麼是進程

比如:windows上安裝的QQ,我們會將其稱為QQ程序,那麼當QQ運行之後,在任務管理器中,我們可以看到QQ程序在運行著,此時,我們稱其為:QQ進程。

言簡意賅總結:當我們運行一個程序,那麼我們將該程序叫進程

注意:
1.當程序運行為進程後,系統會為該進程分配內存,以及運行的身份和許可權。
2.在進程運行的過程中,伺服器上回有各種狀態來表示當前進程的指標信息。

進程是已啟動的可執行程序的運行實例,進程有以下組成部分:

分配內存, 已分配內存的地址空間
安全屬性, 進程的運行身份和許可權
進程代碼, 運行一個或多個的線程
進程狀態, 進程運行後的多種狀態
靜態程序, 二進制文件, 靜態/bin/ls, /usr/sbin/sshd
動態進程, 程序運行的過程, 有生命周期及運行狀態

進程的運行環境,包括以下幾個部分:

局部和全局變數
當前的調度上下文
分配給進程使用的系統資源,例如文件描述符、網路埠等
給進程分配對應的pid,ppid

程序和進程的區別

1.程序是數據和指令的集合,是一個靜態的概念,比如/bin/ls、/bin/cp等二進制文件,同事程序可以長期存在系統中。

2.進程是一個程序的運行過程,是一個動態概念,進程是存在生命周期概念的,也就是說進程會隨著程序的終止而銷毀,不會永遠在系統中存在。

進程的生命周期


程序運行時進程的狀態關系:

1.當父進程接收到任務調度時,會通過fork派生子進程來處理,那麼子進程會集成父進程的衣缽。
2.子進程在處理任務代碼時,父進程會進入等待的狀態...
3.如果子進程在處理任務過程中,父進程退出了,子進程沒有退出,那麼這些子進程就沒有父進程來管理了,就變成了僵屍進程。
4.每個進程都會有自己的PID號,(process id)子進程則PPID

⑽ linux操作系統中常見的進程管理命令有哪些

ps:查看進程
pstree:顯示進程狀態樹
pgrep:查找匹配條件的進程
kill:終止進程
killall:通過進程名終止進程
pkill:通過進程名終止進程
top:實時顯示系統中各個進程的資源佔用狀況
nice:調整程序運行時的優先順序
renice:調整運行中進程的優先順序
nohup:用戶退出系統進程繼續工作
strace:跟蹤進程的系統調用
ltrace:跟蹤進程調用庫函數
runlevel:輸出當前運行級別
init:初始化Linux進程
service:管理系統服務

熱點內容
電腦內存不夠租用伺服器 發布:2024-10-26 01:19:03 瀏覽:598
氟壓縮機房 發布:2024-10-26 01:09:45 瀏覽:405
httpurlconnection緩存 發布:2024-10-26 01:04:24 瀏覽:810
三星手機鎖屏怎麼設置密碼 發布:2024-10-26 01:00:35 瀏覽:847
計劃排程演算法 發布:2024-10-26 00:48:08 瀏覽:8
網站伺服器搭建與管理實訓報告 發布:2024-10-26 00:30:56 瀏覽:746
秦遙控駕駛是哪個配置 發布:2024-10-26 00:25:48 瀏覽:848
神鵰俠侶伺服器連接超時怎麼回事 發布:2024-10-26 00:25:28 瀏覽:381
11系統如何安裝安卓應用 發布:2024-10-26 00:22:40 瀏覽:713
rar解壓縮破解版 發布:2024-10-26 00:12:43 瀏覽:381