新聞中心
在Linux操作系統(tǒng)中,信號(hào)是一種重要的機(jī)制,它用于通知進(jìn)程發(fā)生了特定的事件或錯(cuò)誤。在信號(hào)的機(jī)制中,SIGCONT信號(hào)具有獨(dú)特的作用,本文將深入介紹SIGCONT信號(hào)的相關(guān)知識(shí)。

創(chuàng)新互聯(lián)建站一直在為企業(yè)提供服務(wù),多年的磨煉,使我們?cè)趧?chuàng)意設(shè)計(jì),全網(wǎng)整合營(yíng)銷(xiāo)推廣到技術(shù)研發(fā)擁有了開(kāi)發(fā)經(jīng)驗(yàn)。我們擅長(zhǎng)傾聽(tīng)企業(yè)需求,挖掘用戶(hù)對(duì)產(chǎn)品需求服務(wù)價(jià)值,為企業(yè)制作有用的創(chuàng)意設(shè)計(jì)體驗(yàn)。核心團(tuán)隊(duì)擁有超過(guò)十載以上行業(yè)經(jīng)驗(yàn),涵蓋創(chuàng)意,策化,開(kāi)發(fā)等專(zhuān)業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)托管服務(wù)器、APP應(yīng)用開(kāi)發(fā)、手機(jī)移動(dòng)建站、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)整合營(yíng)銷(xiāo)。
一、什么是SIGCONT信號(hào)
SIGCONT信號(hào)是一個(gè)控制進(jìn)程的信號(hào),它用于喚醒被掛起的進(jìn)程。在Linux中,當(dāng)一個(gè)進(jìn)程被掛起時(shí),它會(huì)進(jìn)入停止?fàn)顟B(tài),直到接收到SIGCONT信號(hào)后才會(huì)恢復(fù)運(yùn)行。SIGCONT信號(hào)是由內(nèi)核發(fā)送給進(jìn)程的,它表示可以恢復(fù)運(yùn)行。
二、SIGCONT信號(hào)的使用場(chǎng)景
SIGCONT信號(hào)主要用于控制進(jìn)程的掛起和恢復(fù)。在Linux中,當(dāng)一個(gè)進(jìn)程被掛起時(shí),可能是由于如下原因:
1. 用戶(hù)通過(guò)鍵盤(pán)輸入Ctrl+Z將進(jìn)程掛起;
2. 進(jìn)程被發(fā)送SIGSTOP信號(hào)掛起;
3. 進(jìn)程被發(fā)送SIGTSTP信號(hào)掛起。
無(wú)論是什么原因造成進(jìn)程被掛起,只有當(dāng)接收到SIGCONT信號(hào)時(shí),進(jìn)程才能恢復(fù)運(yùn)行。
三、發(fā)送和接收SIGCONT信號(hào)
在Linux操作系統(tǒng)中,發(fā)送和接收信號(hào)是進(jìn)程間通信的一種方式。下面分別介紹SIGCONT信號(hào)的發(fā)送和接收。
1. 發(fā)送SIGCONT信號(hào)
在Linux中,可以使用kill命令向進(jìn)程發(fā)送信號(hào)。如果需要向進(jìn)程發(fā)送SIGCONT信號(hào),可以執(zhí)行如下命令:
kill -CONT 進(jìn)程ID
其中,進(jìn)程ID是需要發(fā)送SIHCONT信號(hào)的進(jìn)程的ID號(hào)。執(zhí)行該命令后,進(jìn)程將接收到SIGCONT信號(hào),并從停止?fàn)顟B(tài)中恢復(fù)運(yùn)行。
2. 接收SIGCONT信號(hào)
當(dāng)一個(gè)進(jìn)程接收到SIGCONT信號(hào)時(shí),會(huì)執(zhí)行與該信號(hào)相關(guān)聯(lián)的處理函數(shù)。在Linux中,可以使用signal函數(shù)設(shè)置信號(hào)處理函數(shù)。如果需要為SIGCONT信號(hào)設(shè)置處理函數(shù),可以執(zhí)行如下命令:
signal(SIGCONT, my_handle)
其中,my_handle表示SIGCONT信號(hào)的處理函數(shù)。在收到該信號(hào)時(shí),進(jìn)程將調(diào)用my_handle函數(shù)進(jìn)行處理。
四、SIGCONT信號(hào)的特性
除了用于控制進(jìn)程的掛起和恢復(fù)外,SIGCONT信號(hào)還有一些特性,如下:
1. 優(yōu)先級(jí):SIGCONT信號(hào)的優(yōu)先級(jí)比較高,當(dāng)進(jìn)程接收到多個(gè)信號(hào)時(shí),會(huì)優(yōu)先處理SIGCONT信號(hào)。
2. 阻塞狀態(tài):SIGCONT信號(hào)是不可阻塞的,即使使用了sigprocmask函數(shù)屏蔽了其他信號(hào),SIGCONT信號(hào)仍然可以被接收并處理。
3. 繼承性:當(dāng)一個(gè)進(jìn)程fork出一個(gè)新進(jìn)程時(shí),新進(jìn)程可以繼承原進(jìn)程的信號(hào)處理函數(shù)、信號(hào)屏蔽字等屬性。如果在原進(jìn)程中為SIGCONT信號(hào)設(shè)置了處理函數(shù),那么新進(jìn)程也會(huì)繼承這個(gè)處理函數(shù)。
五、SIGCONT信號(hào)的應(yīng)用
由于SIGCONT信號(hào)的特性較多,因此SIGCONT信號(hào)在Linux操作系統(tǒng)中有著廣泛的應(yīng)用。下面列舉幾種常見(jiàn)的應(yīng)用場(chǎng)景。
1. 進(jìn)程之間的控制:在Linux中,可以通過(guò)SIGCONT信號(hào)來(lái)控制進(jìn)程的啟動(dòng)、停止、暫停和恢復(fù)等操作。
2. 調(diào)試進(jìn)程:在進(jìn)行程序調(diào)試時(shí),可以使用SIGSTOP信號(hào)掛起進(jìn)程,然后使用SIGCONT信號(hào)恢復(fù)其運(yùn)行,以便進(jìn)行多次調(diào)試。
3. 信號(hào)處理函數(shù)的設(shè)計(jì):為了讓進(jìn)程在掛起和恢復(fù)時(shí)能夠及時(shí)響應(yīng)SIGCONT信號(hào),需要設(shè)計(jì)合理的信號(hào)處理函數(shù)。
六、
本文主要介紹了Linux操作系統(tǒng)中的SIGCONT信號(hào),包括其概念、使用場(chǎng)景、發(fā)送和接收方式、特性和應(yīng)用等內(nèi)容。除了控制進(jìn)程的掛起和恢復(fù)外,SIGCONT信號(hào)在進(jìn)程之間的控制、程序調(diào)試和信號(hào)處理函數(shù)等方面也有著廣泛的應(yīng)用。對(duì)于Linux系統(tǒng)開(kāi)發(fā)者和系統(tǒng)管理員來(lái)說(shuō),深入了解SIGCONT信號(hào)是非常必要的。
相關(guān)問(wèn)題拓展閱讀:
- ubuntu|linux下 如何用python 模擬按鍵
- 如何在Linux中查看所有正在運(yùn)行的進(jìn)程
- Linux里面殺掉進(jìn)程命令是什么?
ubuntu|linux下 如何用python 模擬按鍵
ctrl c
ctrl d
在linux 下用的多,用于結(jié)束進(jìn)程。
ubuntu下,也就是linux下,通常會(huì)用kill -事件編號(hào)實(shí)現(xiàn)。 你查一下LINUX下的事件就明白了。
kill 進(jìn)程號(hào) 實(shí)現(xiàn)上是發(fā)了一個(gè)信號(hào)給指定的進(jìn)程。 在python里,也可以加載事件處理模塊,處理來(lái)自其它程序發(fā)過(guò)來(lái)的信號(hào), 當(dāng)然你可以用KILL工具發(fā)信號(hào)過(guò)來(lái)。
ctrl+d也是一個(gè)信號(hào),ctrl+c也是一個(gè)。具體信號(hào)編碼我不記得了。不過(guò)以前我做多進(jìn)程管理時(shí)就是使用這個(gè)方法。 好象信號(hào)還可以帶參數(shù)過(guò)來(lái)。
你打開(kāi)python的幫助。看看signal這個(gè)模塊。我把它的例子拿過(guò)來(lái)。對(duì)你有用不
import signal, os
def handler(signum, frame):
print ‘Signal handler called with signal’, signum
raise IOError(“Couldn’t open device!”)
# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(5)
# This open() may hang indefinitely
fd = os.open(‘/dev/ttyS0’, os.O_RDWR)
signal.alarm(0)# Disable the alarm
下面是我找到的一些資料。也許有用。
信號(hào)的概念
信號(hào)(signal)進(jìn)程之間通訊的方式,是一種軟件中斷。一個(gè)進(jìn)程一旦接收到信號(hào)就會(huì)打斷原來(lái)的程序執(zhí)行流程來(lái)處理信號(hào)。
幾個(gè)常用信號(hào):
SIGINT 終止進(jìn)程 中斷進(jìn)程 (control+c)
SIGTERM 終止進(jìn)程 軟件終止信號(hào)
SIGKILL 終止進(jìn)程 殺死進(jìn)程
SIGALRM 鬧鐘信號(hào)
進(jìn)程結(jié)束信號(hào) SIGTERM和SIGKILL的區(qū)別
SIGTERM比較友好,進(jìn)程能捕捉這個(gè)信號(hào),根據(jù)您的需要來(lái)關(guān)閉程序。在關(guān)閉程序之前,您可以結(jié)束打開(kāi)的記錄文件和完成正在做的任務(wù)。在某些情況下,假如進(jìn)程正在進(jìn)行作業(yè)而且不能中斷,那么進(jìn)程可以忽略這個(gè)SIGTERM信號(hào)。
對(duì)于SIGKILL信號(hào),進(jìn)程是不能忽略的。這是一個(gè) “我不管您在做什么,立刻停止”的信號(hào)。假如您發(fā)送SIGKILL信號(hào)給進(jìn)程,Linux就將進(jìn)程停止在那里。
發(fā)送信號(hào)一般有兩種原因:
1(被動(dòng)式態(tài)世) 內(nèi)核檢測(cè)到一個(gè)系統(tǒng)事件.例如子進(jìn)程退出會(huì)像父進(jìn)程發(fā)送SIGCHLD信號(hào).鍵盤(pán)按下control+c會(huì)發(fā)送SIGINT信號(hào)
2(主動(dòng)式) 通過(guò)系統(tǒng)調(diào)用kill來(lái)向指定進(jìn)程發(fā)送信號(hào)
linux操作系統(tǒng)提供的信號(hào)
$ kill -l
1) SIGHUP) SIGINT) SIGQUIT 銀桐 4) SIGILL
5) SIGTRAP) SIGABRT) SIGBUS) SIGFPE
9) SIGKILL) SIGUSR) SIGSEGV) SIGUSR2
13) SIGPIPE) SIGALRM) SIGTERM) SIGSTKFLT
17) SIGCHLD) SIGCONT) SIGSTOP 鋒閉坦 20) SIGTSTP
21) SIGTTIN) SIGTTOU) SIGURG) SIGXCPU
25) SIGXFSZ) SIGVTALRM 27) SIGPROF) SIGWINCH
29) SIGIO) SIGPWR) SIGSYS) 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
Python提供的信號(hào)
Python 2.4.3 (#1, Jun, 14:09:58)
on linux2
Type “help”, “copyright”, “credits” or “l(fā)icense” for more information.
>>> import signal
>>> dir(signal)
‘SIGCONT’, ‘SIGFPE’, ‘SIGHUP’, ‘SIGILL’, ‘SIGINT’, ‘SIGIO’, ‘SIGIOT’,
‘SIGKILL’, ‘SIGPIPE’, ‘SIGPOLL’, ‘SIGPROF’, ‘SIGPWR’, ‘SIGQUIT’,
‘SIGRTMAX’, ‘SIGRTMIN’, ‘SIGSEGV’, ‘SIGSTOP’, ‘SIGSYS’, ‘SIGTERM’,
‘SIGTRAP’, ‘SIGTSTP’, ‘SIGTTIN’, ‘SIGTTOU’, ‘SIGURG’, ‘SIGUSR1’,
‘SIGUSR2’, ‘SIGVTALRM’, ‘SIGWINCH’, ‘SIGXCPU’, ‘SIGXFSZ’, ‘SIG_DFL’,
‘SIG_IGN’, ‘__doc__’, ‘__name__’, ‘a(chǎn)larm’, ‘default_int_handler’,
‘getsignal’, ‘pause’, ‘signal’>
操作系統(tǒng)規(guī)定了進(jìn)程收到信號(hào)以后的默認(rèn)行為
但是,我們可以通過(guò)綁定信號(hào)處理函數(shù)來(lái)修改進(jìn)程收到信號(hào)以后的行為
有兩個(gè)信號(hào)是不可更改的SIGTOP和SIGKILL
綁定信號(hào)處理函數(shù)
import os
import signal
from time import sleep
def onsignal_term(a,b):
print ‘收到SIGTERM信號(hào)’
#這里是綁定信號(hào)處理函數(shù),將SIGTERM綁定在函數(shù)onsignal_term上面
signal.signal(signal.SIGTERM,onsignal_term)
def onsignal_usr1(a,b):
print ‘收到SIGUSR1信號(hào)’
#這里是綁定信號(hào)處理函數(shù),將SIGUSR1綁定在函數(shù)onsignal_term上面
signal.signal(signal.SIGUSR1,onsignal_usr1)
while 1:
print ‘我的進(jìn)程id是’,os.getpid()
sleep(10)
運(yùn)行該程序。然后通過(guò)另外一個(gè)進(jìn)程來(lái)發(fā)送信號(hào)。
發(fā)送信號(hào)
發(fā)送信號(hào)的代碼如下:
import os
import signal
#發(fā)送信號(hào),16175是前面那個(gè)綁定信號(hào)處理函數(shù)的pid,需要自行修改
os.kill(16175,signal.SIGTERM)
#發(fā)送信號(hào),16175是前面那個(gè)綁定信號(hào)處理函數(shù)的pid,需要自行修改
如何在Linux中查看所有正在運(yùn)行的進(jìn)程
ps -elf 命令即可查看,另外你要學(xué)習(xí)linux的常用命令以方便使用
查看Linux中所有正在運(yùn)行的進(jìn)程 ,可以參考如下方法:
1、通過(guò)ps命瞎源令的-A或者-e參數(shù)來(lái)獲取系統(tǒng)中所有的進(jìn)程,這兩個(gè)參數(shù)的作用一樣的。
2、通過(guò)top命令來(lái)獲取滑殲系統(tǒng)中所有的進(jìn)程任務(wù) 。執(zhí)行top命令后,在tasks一欄會(huì)看到總的任務(wù)數(shù)。信神沖
命令行方式登陸linux系空陪統(tǒng)
su – root 切換到root權(quán)限
ps -A 查看結(jié)果
ps命令有好多察戚參數(shù),一般ps -aux 用敗虧陵的比較多。可以用ps –help查看幫助。
ps 和 top都可以看系統(tǒng)中正在運(yùn)行的進(jìn)程
ps 命令提供了當(dāng)前運(yùn)行進(jìn)程的快照。
使用帶有 -ef 選項(xiàng)的 ps ,返回系統(tǒng)中所有用戶(hù)的所有進(jìn)山耐程的完整列表。如果您將此 ps 命令的結(jié)果傳送到 grep 中,則該結(jié)果更易于查看。例如:
$ ps -ef | grep oracle
這沒(méi)唯叢條命令會(huì)顯示:
UID PID PPID C STIME TTY TIME CMD
oracle:58 ?00:00:00 ora_pmon_ora1
oracle:58 ?00:00:00 ora_dbw0_ora1
oracle:58 ?00:00:01 ora_lgwr_ora1
oracle:58 ?00:00:02 ora_ckpt_ora1
下面是ps的選項(xiàng)
-A:列出所有的進(jìn)程。
-l:顯示長(zhǎng)列表。
-m:顯示內(nèi)存信息。
-w:顯枯櫻示加寬可以顯示較多的信息。
-e:顯示所有進(jìn)程。
a:顯示終端上的所有進(jìn)程,包括其它用戶(hù)的進(jìn)程。
-au:顯示較詳細(xì)的信息。
-aux:顯示所有包含其它使用者的進(jìn)程。
要即時(shí)查看最活躍的進(jìn)程,可使用 top
ps aux 或者 ps -le
名稱(chēng):ps
使用權(quán)限:所有使用者
使用方式:ps
說(shuō)明腔汪:顯示瞬間行程 (process) 的動(dòng)態(tài)
參數(shù):ps的參數(shù)非常多, 在此僅列出幾個(gè)常用的參數(shù)并大略介紹含義
-A 列出所有的進(jìn)程
-w 顯示加寬可以顯示較多的資訊
-au 顯示較詳細(xì)的資訊
-aux 顯示所有包含其他使用者的行程
############################################################
常用參數(shù):
-A 顯示所有進(jìn)程(等價(jià)于-e)(utility)
-a 顯示一個(gè)終端的所有進(jìn)程,除了會(huì)話引線
-N 忽略選擇。
-d 顯示所有進(jìn)程,但省略所有的會(huì)話引線(utility)
-x 顯示沒(méi)有控制終端的進(jìn)程,同時(shí)顯示各個(gè)命令的具體路徑。dx不可合用。(utility)
-p pid 進(jìn)程使用cpu的時(shí)間
-u uid or username 選擇有效慎圓陸的用戶(hù)id或者是用戶(hù)名
-g gid or groupname 顯示組的所有進(jìn)程。
U username 顯示該用戶(hù)下的所有進(jìn)程,且顯示各個(gè)命令的詳細(xì)路徑。如:ps U zhang;(utility)
-f 全部列出,通常和其他選項(xiàng)聯(lián)用。如:ps -fa or ps -fx and so on.
-l 長(zhǎng)格式(有F,wchan,C 等字段)
-j 作業(yè)格式
-o 用戶(hù)自定義格式。
v 以虛擬存儲(chǔ)器格式顯示
s 以信號(hào)格式顯示
-m 顯示所有的線程
-H 顯示進(jìn)程的層次(和其它的命令合用,如:ps -Ha)(utility)
e 命令之后顯示環(huán)境(如:ps -d e; ps -a e)(utility)
h 不顯示之一行
############################################################
ps命令常用用法(方便查看系統(tǒng)進(jìn)程)
1)ps a 顯示現(xiàn)行終端機(jī)下的所有程序,包括其他用戶(hù)的程序。
2)ps -A 顯示所有進(jìn)程。
3)ps c 列出程序時(shí),顯示每個(gè)程序真正的指令名稱(chēng),而不包含路徑,參數(shù)或常駐服務(wù)的標(biāo)示。
4)ps -e 此參數(shù)的效果和指定”A”參數(shù)相同。
5)ps e 列出程序時(shí),顯示每個(gè)程序所使用的環(huán)境變量。
6)ps f 用ASCII字符顯示樹(shù)狀結(jié)構(gòu),表達(dá)程序間的相互關(guān)系。
7)ps -H 顯示樹(shù)狀結(jié)構(gòu),表示程序間的相互關(guān)系。
8)ps -N 顯示所有的程序,除了執(zhí)行ps指令終端機(jī)下的程序之外。
9)ps s 采用程序信號(hào)的格式顯示程序狀況。
10)ps S 列寬頃出程序時(shí),包括已中斷的子程序資料。
11)ps -t 指定終端機(jī)編號(hào),并列出屬于該終端機(jī)的程序的狀況。
12)ps u 以用戶(hù)為主的格式來(lái)顯示程序狀況。
13)ps x 顯示所有程序,不以終端機(jī)來(lái)區(qū)分。
最常用的方法是ps -aux,然后再利用一個(gè)管道符號(hào)導(dǎo)向到grep去查找特定的進(jìn)程,然后再對(duì)特定的進(jìn)程進(jìn)行操作。
############################################################
運(yùn)行 ps aux 的到如下信息:
root:# ps aux
USER PID%CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
msp.0 0.? Ss 20::00 sendmail: Queue runner@01:00:00 f
root.0 0.52 ? Ss 20::00 gpm -m /dev/input/mice -t imps2
htt.0 0.96 ? Ss 20::00 /usr/in/htt -retryonerror 0
htt.0 1.? Sl 20::00 htt_server -nodaemon
root.0 0.92 ? Ss 20::00 crond
xfs.0 1.? Ss 20::00 xfs -droppriv -daemon
root.0 0.52 ? SNs 20::00 anacron -s
root.0 0.20 ? Ss 20::00 /usr/in/atd
dbus.0 0.? Ssl 20::00 dbus-daemon-1 –system
Head標(biāo)頭:
USER 用戶(hù)名
UID 用戶(hù)ID(User ID)
PID 進(jìn)程ID(Process ID)
PPID 父進(jìn)程的進(jìn)程ID(Parent Process id)
SID 會(huì)話ID(Session id)
%CPU 進(jìn)程的cpu占用率
%MEM 進(jìn)程的內(nèi)存占用率
VSZ 進(jìn)程所使用的虛存的大?。╒irtual Size)
RSS 進(jìn)程使用的駐留集大小或者是實(shí)際內(nèi)存的大小,Kbytes字節(jié)。
TTY 與進(jìn)程關(guān)聯(lián)的終端(tty)
STAT 進(jìn)程的狀態(tài):進(jìn)程狀態(tài)使用字符表示的(STAT的狀態(tài)碼)
R 運(yùn)行 Runnable (on run queue)正在運(yùn)行或在運(yùn)行隊(duì)列中等待。
S 睡眠 Sleeping 休眠中, 受阻, 在等待某個(gè)條件的形成或接受到信號(hào)。
I 空閑 Idle
Z 僵死 Zombie(a defunct process)進(jìn)程已終止, 但進(jìn)程描述符存在, 直到父進(jìn)程調(diào)用wait4()系統(tǒng)調(diào)用后釋放。
D 不可中斷 Uninterruptible sleep (ususally IO) 收到信號(hào)不喚醒和不可運(yùn)行, 進(jìn)程必須等待直到有中斷發(fā)生。
T 終止 Terminate 進(jìn)程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號(hào)后停止運(yùn)行運(yùn)行。
P 等待交換頁(yè)
W 無(wú)駐留頁(yè) has no resident pages沒(méi)有足夠的記憶體分頁(yè)可分配。
X 死掉的進(jìn)程
ps001.txt
把結(jié)果輸出到ps001.txt文本中并保存。
# more ps001.txt
這里是把所有進(jìn)程顯示出來(lái),并輸出到ps001.txt文件,然后再通過(guò)more 來(lái)分頁(yè)查看。
4、kill 終止(殺死)進(jìn)程,有十幾種控制進(jìn)程的方法,下面是一些常用的方法:
#kill -STOP
發(fā)送SIGSTOP (17,19,23)停止一個(gè)進(jìn)程,而并不消滅這個(gè)進(jìn)程。
#kill -CONT
發(fā)送SIGCONT (19,18,25)重新開(kāi)始一個(gè)停止的進(jìn)程。
#kill -KILL
發(fā)送SIGKILL (9)強(qiáng)迫進(jìn)程立即停止,并且不實(shí)施清理操作。
#kill -9 -1
終止你擁有的全部進(jìn)程。
Linux里面殺掉進(jìn)程命令是什么?
Linux 操作系統(tǒng)帶有一個(gè)kill 命令來(lái)終止進(jìn)程。該命令可以繼續(xù)運(yùn)行服務(wù)器,而無(wú)需在重大更改/更新后重新啟動(dòng)。
Kill命令向當(dāng)前正在運(yùn)行的進(jìn)程發(fā)送一個(gè)信號(hào),一個(gè)指定的信號(hào)。kill 命令可以通過(guò)多種方式直接執(zhí)行或從 shell 腳本執(zhí)行。
使用/usr/bin中的kill命令為你提供了一些額外的功能,可以使用pkill按進(jìn)程名稱(chēng)殺死進(jìn)程。本文惠主機(jī)www.idccoupon.com簡(jiǎn)單來(lái)介紹下。
Kill命令用法
kill 命令的常用語(yǔ)法是:
# kill PID(s
對(duì)于kill 命令,信號(hào)名稱(chēng)可汪租以是:
Signal NameSignal ValueBehaviourSIGHUPHangup
SIGKILLKill Signal
SIGTERMTerminate
從上面的行為可以清楚地看出,SIGTERM是殺死進(jìn)程的默認(rèn)和最安全的方法。SIGHUP是一種比SIGTERM更不安全的終止進(jìn)程的方法。SIGKILL是上述三種方法中最不安全的一種,即殺死一個(gè)進(jìn)程而終止一個(gè)進(jìn)程而不保存。
為了殺死一個(gè)進(jìn)程,我們需要知道一個(gè)進(jìn)程的進(jìn)程 ID。進(jìn)程是程序的一個(gè)實(shí)例。每次程序啟動(dòng)時(shí),都會(huì)自動(dòng)為該進(jìn)程生成一個(gè)唯一的PID 。
Linux中的每個(gè)進(jìn)程 都有一手陵賣(mài)個(gè)pid。Linux 系統(tǒng)啟動(dòng)時(shí)啟動(dòng)的之一個(gè)進(jìn)程是-init 進(jìn)程,因此在大多數(shù)情況下,它被分配了一個(gè)值“ 1 ”。
init是主進(jìn)程,不能這樣被殺死,這樣可以保證主進(jìn)程不會(huì)被意外殺死。Init決定并允許自己被殺死,其中 kill 只是一個(gè)關(guān)閉請(qǐng)求。
列出所有正在運(yùn)行的 Linux 進(jìn)程
要了解所有進(jìn)程及其分配的pid,請(qǐng)運(yùn)行以下ps 命令。
#ps -A
樣本輸出如下:
PID TTYTIME CMD
1 ?:00:01 init
2 ?:00:00 kthreadd
3 ?:00:00 migration/0
4 ?:00:00 ksoftirqd/0
5 ?:00:00 migration/0
6 ?:00:00 watchdog/0
7 ?:00:01 events/0
8 ?:00:00 cgroup
9 ?:00:00 khelper
10 ?:00:00 netns
11 ?:00:00 async/mgr
12 ?:00:00 pm
13 ?:00:00 sync_supers
14 ?:00:00 bdi-default
15 ?:00:00 kintegrityd/0
16 ?:00:00 kblockd/0
17 ?:00:00 kacpid
18 ?:00:00 kacpi_notify
19 ?:00:00 kacpi_hotplug
20 ?畢逗00:00:00 ata/0
21 ?:00:00 ata_aux
22 ?:00:00 ksuspend_ud
如何使用語(yǔ)法自定義上述輸出為 ‘ pidof process ‘。
# pidof mysqld
樣本輸出:
1684
當(dāng)然,實(shí)現(xiàn)上述目標(biāo)的另一種方法是遵循以下語(yǔ)法。
# ps aux | grep mysqld
樣本輸出如下:
root.0 0. ?S 09:49 0:00
/bin/sh /usr/bin/mysqld_safe –datadir=/var/lib/mysql
–socket=/var/lib/mysql/mysql.sock –pid-file=/var/run/mysqld/mysqld.pid
–basedir=/usr –user=mysql
mysql.1 0. ?Sl 09:49 1:09
/usr/libexec/mysqld –basedir=/usr –datadir=/var/lib/mysql –user=mysql
–log-error=/var/log/mysqld.log –pid-file=/var/run/mysqld/mysqld.pid
–socket=/var/lib/mysql/mysql.sock
root.0 0. pts/0 S+ 21:39
0:00 grep mysqld
如何在Linux中殺死一個(gè)進(jìn)程
接下來(lái)在繼續(xù)執(zhí)行kill 命令之前,需要注意一些要點(diǎn):
用戶(hù)可以殺死他的所有進(jìn)程。
一個(gè)用戶(hù)不能殺死另一個(gè)用戶(hù)的進(jìn)程。
用戶(hù)不能殺死系統(tǒng)正在使用的進(jìn)程。
root 用戶(hù)可以殺死系統(tǒng)級(jí)進(jìn)程和任何用戶(hù)的進(jìn)程。
執(zhí)行相同功能的另一種方法是執(zhí)行“ pgrep ”命令。
# pgrep mysql
樣本輸出如下:
3139
要?dú)⑺郎鲜鲞M(jìn)程PID,請(qǐng)使用 kill 命令,如圖所示。
kill
上面的命令將殺死pid = 3139的進(jìn)程,其中PID是進(jìn)程的數(shù)值。
執(zhí)行相同功能的另一種方法可以重寫(xiě)為。
# kill -SIGTERM 3139
同樣,“ kill -9 PID ”類(lèi)似于“ kill -SIGKILL PID ”,反之亦然。
如何在 Linux 中使用進(jìn)程名稱(chēng)殺死一個(gè)進(jìn)程
你必須知道進(jìn)程名稱(chēng),在殺死和輸入錯(cuò)誤的進(jìn)程名稱(chēng)之前可能會(huì)搞砸。
# pkill mysqld
一次殺死多個(gè)進(jìn)程。
# kill PID1 PID2 PID3
或者
# kill -9 PID1 PID2 PID3
或者
# kill -SIGKILL PID1 PID2 PID3
如果一個(gè)進(jìn)程有太多實(shí)例和許多子進(jìn)程,我們有一個(gè)命令 ‘ killall ‘ 或pkill。這兩個(gè)是該系列中唯一的命令,它以進(jìn)程名稱(chēng)作為參數(shù)代替進(jìn)程號(hào)。
句法:
# killall Process Name
或者
# pkill Process Name
要?dú)⑺浪衜ysql 實(shí)例以及子進(jìn)程,請(qǐng)使用以下命令。
# killall mysqld
或者
# pkill mysqld
當(dāng)然,你始終可以使用以下任何命令驗(yàn)證進(jìn)程的狀態(tài)是否正在運(yùn)行。
# service mysql status
或者
# systemctl status mysql
# pgrep mysql
# ps -aux | grep mysql
方法一: Terminal終端輸入: gnome-system-monitor,就可以打開(kāi)system monitor
如圖:
然后找到相應(yīng)進(jìn)程,右擊選擇kill process就可以了
方法二: 通過(guò)kill 進(jìn)程id的方式可以實(shí)現(xiàn),
首先需要知道進(jìn)程id, 例如,想要?dú)⑺纅irefox的進(jìn)程,通過(guò) ps -ef|grep firefox,可以查到firefox的進(jìn)程id:
然后通過(guò) kill 3781 就可以關(guān)閉進(jìn)程了.
補(bǔ)充: 1. kill -9 來(lái)強(qiáng)制終止退出, 例如: kill
2.特殊用法:
kill -STOP
發(fā)送SIGSTOP (17,19,23)停止一個(gè)進(jìn)程,而并不消段巧滅這個(gè)進(jìn)程。
kill -CONT
發(fā)送SIGCONT (19,18,25)重新開(kāi)始一個(gè)停止的進(jìn)程。
kill -KILL
發(fā)送SIGKILL (9)強(qiáng)迫進(jìn)程立即停止,并且不實(shí)施清理操作。
kill -9 -1
終止你擁有的全部進(jìn)程。
方法三: killall 通過(guò)程序的名字,來(lái)殺死進(jìn)程
例如: killall firefox
注意: 該命令可以使用 -9 參數(shù)來(lái)強(qiáng)制運(yùn)畢殺死進(jìn)程, killall -9 firefox
方法四: pkill 通過(guò)程序的名字, 直接殺死所有進(jìn)程
例如: pkill firefox
方法五: 通過(guò)xkill 可以殺死圖形程序應(yīng)用, 例如firefox崩潰無(wú)響應(yīng),可以使用該命令.
例如: 用法xkill , 會(huì)出現(xiàn)一個(gè)白色的x, 然后用鼠標(biāo)單擊想要?dú)⑺赖膽?yīng)用,如圖
以下內(nèi)容引用自:
◆編者注:
KILLALL(Section: User (1)/Updated: 1999年9月7日)
———————————————–
NAME (名稱(chēng))
killall – 以名字方式來(lái)殺死進(jìn)程
SYNOPSIS (總覽)
killall name …
killall -l
killall -V
DESCRIPTION (描述)
killall 發(fā)送一條信號(hào)給所有運(yùn)行任意指定命令的進(jìn)程. 如果沒(méi)有指定信號(hào)名, 則發(fā)送SIGTERM.。
信號(hào)可以以名字 (如 -HUP ) 或者數(shù)字 (如 -1 ) 的方式指定. 信號(hào) 0 (檢查進(jìn)程是否存在)只能以數(shù)字方式指定。
如果命令名包括
斜杠
(/), 那么執(zhí)行該特定文件的進(jìn)程將被殺掉, 這與進(jìn)程名無(wú)關(guān)。
如果對(duì)于所列命令無(wú)進(jìn)程可殺, 那么 killall 會(huì)返回非零值. 如果對(duì)于每條命令至少殺死了一個(gè)進(jìn)程, killall 返回 0。Killall 進(jìn)程決不會(huì)殺死自己 (但是可以殺死其它 killall 進(jìn)程)。
OPTIONS (選項(xiàng))
-e
對(duì) 于很長(zhǎng)的名字, 要求準(zhǔn)確匹配. 如果一個(gè)命令名長(zhǎng)于 15 個(gè)字符, 則可能不能用整個(gè)名字 (溢出了). 在這種情況下, killall 會(huì)殺死所有匹配名字前 15 個(gè)字符的所有進(jìn)程. 有了 -e 選項(xiàng),這樣的記錄將忽略. 如果同時(shí)指定了 -v 選項(xiàng), killall 會(huì)針對(duì)每個(gè)忽略的記錄打印一條消息。
-g
殺死屬于該進(jìn)程組的進(jìn)程. kill 信號(hào)給每個(gè)組旁燃芹只發(fā)送一次, 即使同一進(jìn)程組中包含多個(gè)進(jìn)程。
-i
交互方式,在殺死進(jìn)程之前征求確認(rèn)信息。
-l
列出所有已知的信號(hào)名。
-q
如果沒(méi)有進(jìn)程殺死, 不會(huì)提出抱怨。
-v
報(bào)告信號(hào)是否成功發(fā)送。
-V
顯示版本信息。
-w
等待所有殺的進(jìn)程死去. killall 會(huì)每秒檢查一次是否任何被殺的進(jìn)程仍然存在, 僅當(dāng)都死光后才返回. 注意: 如果信號(hào)被忽略或沒(méi)有起作用, 或者進(jìn)程停留在僵尸狀態(tài), killall 可能會(huì)永久等待。
FILES(相關(guān)文件)
/proc proc
文件系統(tǒng)
的存在位置。
KNOWN bugS (已知 BUGS)
以文件方式殺死只對(duì)那些在執(zhí)行時(shí)一直打開(kāi)的
可執(zhí)行文件
起作用, 也即, 混雜的可執(zhí)行文件不能夠通過(guò)這種方式殺死。
要警告的是輸入 killall name 可能不會(huì)在非 Linux 系統(tǒng)上產(chǎn)生預(yù)期的效果, 特別是特權(quán)用戶(hù)執(zhí)行時(shí)要小心。
在兩次掃描的間隙, 如果進(jìn)程消失了而被代之以一個(gè)有同樣 PID 的新進(jìn)程, killall -w 偵測(cè)不到。
來(lái)源:
下面來(lái)了解相關(guān)命令:
一、查看進(jìn)程的命令 有ps、pstree、pgrep等:
1、ps
顯示進(jìn)程信息,參數(shù)可省略
-aux 以BSD風(fēng)格顯示進(jìn)程 常用
-efH 以System V風(fēng)格顯示進(jìn)程
-e , -A 顯示所有進(jìn)程
a顯示終端上所有用戶(hù)的進(jìn)程
x顯示無(wú)終端進(jìn)程
u 顯示詳細(xì)信息
f樹(shù)狀顯示
w 完整顯示信息
l 顯示長(zhǎng)列表
在終端中執(zhí)行ps aux,
各列輸出字段的含義:
USER進(jìn)程所有者
PID進(jìn)程ID
PPID父進(jìn)程
%CPUCPU占用率
%MEM 內(nèi)存占用率
NI進(jìn)程
優(yōu)先級(jí)
。數(shù)值越大,占用CPU時(shí)間越少
VSZ進(jìn)程虛擬大小
RSS頁(yè)面文件占用
TTY終端ID
STAT進(jìn)程狀態(tài)
+—D 不可中斷 Uninterruptible sleep (usually IO)
+—R 正在運(yùn)行,或在隊(duì)列中的進(jìn)程
+—S 處于休眠狀態(tài)
+—T 停止或被追蹤
+—Z 僵尸進(jìn)程
+—W 進(jìn)入內(nèi)存交換(從內(nèi)核2.6開(kāi)始無(wú)效)
+—X 死掉的進(jìn)程
+
顯示進(jìn)程的PID
-l 顯示進(jìn)程名和進(jìn)程PID
-o 進(jìn)程起始ID
-n 進(jìn)程終止ID
二、結(jié)束進(jìn)程的命令 有kill、pkill、killall、xkill等:
kill
根據(jù)PID向進(jìn)程發(fā)送信號(hào),常用來(lái)結(jié)束進(jìn)程,默認(rèn)信號(hào)為 -9
信號(hào)代碼,可取值如下:
-l
信號(hào)數(shù)字
> 顯示、翻譯信號(hào)代碼
-9 , -KILL 發(fā)送 kill 信號(hào)退出
-6 , -ABRT 發(fā)送 abort 信號(hào)退出
-15 , -TERM 發(fā)送 Termination 信號(hào)
-1 , -HUP 掛起
-2 , -INT 從鍵盤(pán)中斷,相當(dāng)于 Ctrl+c
-3 , -QUIT 從鍵盤(pán)退出,相當(dāng)于 Ctrl+d
-4 , -ILL 非法指令
-11 , -SEGV 內(nèi)存錯(cuò)誤
-13 , -PIPE 破壞管道
-14 , -ALRM
-STOP 停止進(jìn)程,但不結(jié)束
-CONT 繼續(xù)運(yùn)行已停止的進(jìn)程
-9 -1 結(jié)束當(dāng)前用戶(hù)的所有進(jìn)程
pkill
結(jié)束進(jìn)程族。如果結(jié)束單個(gè)進(jìn)程,請(qǐng)用 kill
killall
killall和pkill 應(yīng)用方法差不多,也是直接殺死運(yùn)行中的程序;如果您想殺掉單個(gè)進(jìn)程,請(qǐng)用kill 來(lái)殺掉。
xkill
在圖形界面中點(diǎn)殺進(jìn)程。
當(dāng)xkill運(yùn)行時(shí)鼠標(biāo)指針變?yōu)轺俭t圖案,哪個(gè)圖形程序崩潰一點(diǎn)就OK了。如果您想終止xkill ,就按右鍵取消。
比如當(dāng)firefox 出現(xiàn)崩潰不能退出時(shí),點(diǎn)鼠標(biāo)就能殺死firefox 。
xkill 調(diào)用方法:
# xkill
來(lái)源:
linux中pkill的簡(jiǎn)單用法
pkill 和killall 應(yīng)用方法差不多,也是直接殺死運(yùn)行中的程序;如果您想殺掉單個(gè)進(jìn)程,請(qǐng)用kill 來(lái)殺掉。
必要參數(shù)
-f 顯示完整程序
-l 顯示源代碼
-n 顯示新程序
-o 顯示舊程序
-v 與條件不符合的程序
-x 與條件符合的程序
選擇參數(shù)
-p 列出父進(jìn)程為用戶(hù)指定進(jìn)程的進(jìn)程信息
-t 指定終端下的所有程序
-u 指定用戶(hù)的程序
應(yīng)用方法:
#pkill 正在運(yùn)行的程序名
舉例:
Java代碼
# pgrep -l gaim
2979 gaim
# pkill gaim
也就是說(shuō):
kill 對(duì)應(yīng)的是 PID
pkill 對(duì)應(yīng)的是COMMAND
例如在Ubuntu中強(qiáng)制結(jié)束一個(gè)已成僵尸的名稱(chēng)為:firefox,PID為:1603的進(jìn)程,可以如下操作:
方法一:
?。?)ctrl+alt+t,調(diào)出終端,輸入 top,然后就可以看到現(xiàn)在系統(tǒng)的進(jìn)程,是按占用資源從多到少排列的。
找到要關(guān)掉的進(jìn)程,記下該進(jìn)程之一列的數(shù)字編號(hào)(假設(shè)是xx),然后輸入q,退回終端。
?。?)輸入:sudo kill xx(對(duì)應(yīng)剛才的編號(hào))。
方法二:
ctrl+alt+t,調(diào)出終端,輸入:sudo pkill firefox
范例1: 殺死指定進(jìn)程
Java代碼
root@snail-hnlinux:~# ps -A //顯示所有進(jìn)程
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
31653 ? 00:00:00 aptd
31658 pts/1 00:00:00 ps
root@snail-hnlinux:~# pidof sshd //查看與sshd相關(guān)進(jìn)程
95
root@snail-hnlinux:~# pkill -9 sshd //殺死指定進(jìn)程
范例2:殺死同義終端下的進(jìn)程
Java代碼
root@snail-hnlinux:~# pkill -t tty1 //殺死終端1下的所有進(jìn)程
范例3: 殺死指定用戶(hù)進(jìn)程
Java代碼
root@snail-hnlinux:~# pkill -u hnlinux
范例4:反向選擇
Java代碼
root@snail-hnlinux:~# pkill -vu hnlinux //殺死不屬于hnlinux用戶(hù)的所有進(jìn)程
————————————————
版權(quán)聲明:本文為CSDN博主「MrCoderr」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:
killall -9 進(jìn)程名
或kill -9 進(jìn)程纖虛pid
關(guān)于linux sigcont的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)公司提供專(zhuān)業(yè)的建站服務(wù),為您量身定制,歡迎來(lái)電(028-86922220)為您打造專(zhuān)屬于企業(yè)本身的網(wǎng)絡(luò)品牌形象。
成都創(chuàng)新互聯(lián)品牌官網(wǎng)提供專(zhuān)業(yè)的網(wǎng)站建設(shè)、設(shè)計(jì)、制作等服務(wù),是一家以網(wǎng)站建設(shè)為主要業(yè)務(wù)的公司,在網(wǎng)站建設(shè)、設(shè)計(jì)和制作領(lǐng)域具有豐富的經(jīng)驗(yàn)。
網(wǎng)站欄目:深入了解Linux中的SIGCONT信號(hào)(linuxsigcont)
文章來(lái)源:http://www.dlmjj.cn/article/djijspe.html


咨詢(xún)
建站咨詢(xún)
