ubuntu下,也就是linux下,通常會(huì)用kill -事件編號(hào)實(shí)現(xiàn)。 你查一下LINUX下的事件就明白了。
嘉善網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),嘉善網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為嘉善1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的嘉善做網(wǎng)站的公司定做!
kill 進(jìn)程號(hào) 實(shí)現(xiàn)上是發(fā)了一個(gè)信號(hào)給指定的進(jìn)程。 在python里,也可以加載事件處理模塊,處理來自其它程序發(fā)過來的信號(hào), 當(dāng)然你可以用KILL工具發(fā)信號(hào)過來。
ctrl+d也是一個(gè)信號(hào),ctrl+c也是一個(gè)。具體信號(hào)編碼我不記得了。不過以前我做多進(jìn)程管理時(shí)就是使用這個(gè)方法。 好象信號(hào)還可以帶參數(shù)過來。
你打開python的幫助??纯磗ignal這個(gè)模塊。我把它的例子拿過來。對(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ì)打斷原來的程序執(zhí)行流程來處理信號(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ù)您的需要來關(guān)閉程序。在關(guān)閉程序之前,您可以結(jié)束打開的記錄文件和完成正在做的任務(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)式)??內(nèi)核檢測到一個(gè)系統(tǒng)事件.例如子進(jìn)程退出會(huì)像父進(jìn)程發(fā)送SIGCHLD信號(hào).鍵盤按下control+c會(huì)發(fā)送SIGINT信號(hào)
2(主動(dòng)式)??通過系統(tǒng)調(diào)用kill來向指定進(jìn)程發(fā)送信號(hào)
linux操作系統(tǒng)提供的信號(hào)
[100003@oss235 myppt]$ kill -l
1) SIGHUP???????2) SIGINT???????3) SIGQUIT??????4) SIGILL
5) SIGTRAP??????6) SIGABRT??????7) SIGBUS???????8) SIGFPE
9) SIGKILL?????10) SIGUSR1?????11) SIGSEGV?????12) SIGUSR2
13) SIGPIPE?????14) SIGALRM?????15) SIGTERM?????16) SIGSTKFLT
17) SIGCHLD?????18) SIGCONT?????19) SIGSTOP?????20) SIGTSTP
21) SIGTTIN?????22) SIGTTOU?????23) SIGURG??????24) SIGXCPU
25) SIGXFSZ?????26) SIGVTALRM???27) SIGPROF?????28) SIGWINCH
29) SIGIO???????30) SIGPWR??????31) SIGSYS??????34) 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 11 2009, 14:09:58)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import signal
dir(signal)
['NSIG', 'SIGABRT', 'SIGALRM', 'SIGBUS', 'SIGCHLD', 'SIGCLD',
'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__', 'alarm', 'default_int_handler',
'getsignal', 'pause', 'signal']
操作系統(tǒng)規(guī)定了進(jìn)程收到信號(hào)以后的默認(rèn)行為
但是,我們可以通過綁定信號(hào)處理函數(shù)來修改進(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)行該程序。然后通過另外一個(gè)進(jìn)程來發(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,需要自行修改 ?
os.kill(16175,signal.SIGUSR1)
很簡單的問題,其實(shí)只要好好看完譚老的書,這些問題就不在是問題了。加油吧。
1.這兩個(gè)是對(duì)函數(shù)的聲明,double factorial(int) double 是函數(shù)的返回值類型, int是函數(shù)參數(shù)的類型,這里只有一個(gè)參數(shù)。另外一個(gè)也是這個(gè)意思。不過Term函數(shù)的參數(shù)是有兩個(gè)參數(shù),double類型和int類型。因?yàn)槌绦蛑杏袑?duì)自定義函數(shù)的引用,所以首先要進(jìn)行聲明,程序的最后則是對(duì)這兩個(gè)函數(shù)的定義。
2.l是long的意思,明白了吧,就是長類型,如long int,就是長整型。這里lf就是雙精度。
3.fabs是編譯器提供的函數(shù),求絕對(duì)值。就是求dTemp的絕對(duì)值然后與dEps進(jìn)行比較。
4.這個(gè)我已經(jīng)說了,程序的最后是對(duì)所自定義的函數(shù)進(jìn)行的定義。也就是對(duì)你自己定義的函數(shù)的設(shè)計(jì)。
通過你提的問題可以看出,對(duì)c的學(xué)習(xí)還是很淺。書本的基本知識(shí)還是要抓經(jīng)的,畢竟沒有基本功,想學(xué)好c語言是不可能的。
建議你先看完譚浩強(qiáng)的c語言教程。
加油?。?/p>
1、在python中,Python 用反斜線 (“\”) 作為續(xù)行符(換行符),這里以python3.5為例。首先運(yùn)行終端或者cmd命令行(windows下),執(zhí)行python3.5的命令。
2、然后輸入如下圖所示的內(nèi)容。本身就是輸出hello world!的字符串。但是這里使用了"\"進(jìn)行換行。
3、這種換行方法也可以在編輯器中進(jìn)行,這里以vim為例,輸入與上圖類似的代碼,保存為t.py腳本文件。
4、在bash中執(zhí)行如下命令,同樣可以執(zhí)行。
5、如果不希望使用命令,則可以給python腳本加上權(quán)限。首先要在腳本文件中指明腳本解釋器為python。在上面的t.py腳本文件中加入下面一行內(nèi)容:#!/usr/bin/env python。
6、然后執(zhí)行如下命令給t.py添加可執(zhí)行權(quán)限,chmod 755 t.py。
執(zhí)行如下命令執(zhí)行python腳本,./t.py,同樣可以執(zhí)行。