1. linux 榪滅▼涓繪満鍚庡彴榪愯屼換鍔 鎸傝搗鑴氭湰
鑳屾櫙 錛氬伐浣滈渶瑕侊紝闇瑕佽繙紼嬫帶鍒朵富鏈轟嬌鍏舵柇寮Xshell鍚庝篃鑳戒竴鐩磋繍琛屻
鍏抽敭瀛 錛& 錛宯ohup錛岃剼鏈鎸傝搗銆
鍦ㄥ簲鐢║nix/Linux鏃訛紝鎴戜滑涓鑸鎯寵╂煇涓紼嬪簭鍦ㄥ悗鍙拌繍琛岋紝浜庢槸鎴戜滑灝嗗父浼氱敤 & 鍦ㄧ▼搴忕粨灝炬潵璁╃▼搴忚嚜鍔ㄨ繍琛屻
閿鍏Ctrl + C錛屽彂鍑篠IGINT淇″彿錛岀▼搴忎細緇х畫榪愯
鏂規硶涓銆佽緭鍏ュ懡浠わ細jobs
鏂規硶浜岋細杈撳叆鍛戒護錛歱s
fg銆乥g銆乯obs銆&銆乶ohup銆乧trl+z銆乧trl+c 鍛戒護
鍔犲湪涓涓鍛戒護鐨勬渶鍚庯紝鍙浠ユ妸榪欎釜鍛戒護鏀懼埌鍚庡彴鎵ц岋紝濡
鍙浠ュ皢涓涓姝e湪鍓嶅彴鎵ц岀殑鍛戒護鏀懼埌鍚庡彴錛屽苟涓斿勪簬鏆傚仠鐘舵併
鏌ョ湅褰撳墠鏈夊氬皯鍦ㄥ悗鍙拌繍琛岀殑鍛戒護
jobs -l閫夐」鍙鏄劇ず鎵鏈変換鍔$殑PID錛宩obs鐨勭姸鎬佸彲浠ユ槸running, stopped, Terminated銆備絾鏄濡傛灉浠誨姟琚緇堟浜嗭紙kill錛夛紝shell 浠庡綋鍓嶇殑shell鐜澧冨凡鐭ョ殑鍒楄〃涓鍒犻櫎浠誨姟鐨勮繘紼嬫爣璇嗐
灝嗗悗鍙頒腑鐨勫懡浠よ皟鑷沖墠鍙扮戶緇榪愯屻傚傛灉鍚庡彴涓鏈夊氫釜鍛戒護錛屽彲浠ョ敤fg %jobnumber錛堟槸鍛戒護緙栧彿錛屼笉鏄榪涚▼鍙鳳級灝嗛変腑鐨勫懡浠よ皟鍑恆
灝嗕竴涓鍦ㄥ悗鍙版殏鍋滅殑鍛戒護錛屽彉鎴愬湪鍚庡彴緇х畫鎵ц屻傚傛灉鍚庡彴涓鏈夊氫釜鍛戒護錛屽彲浠ョ敤bg %jobnumber灝嗛変腑鐨勫懡浠よ皟鍑恆
娉曞瓙1錛氶氳繃jobs鍛戒護鏌ョ湅job鍙鳳紙鍋囪句負num錛夛紝鐒跺悗鎵ц宬ill %num
娉曞瓙2錛氶氳繃ps鍛戒護鏌ョ湅job鐨勮繘紼嬪彿錛圥ID錛屽亣璁句負pid錛夛紝鐒跺悗鎵ц宬ill pid
鍓嶅彴榪涚▼鐨勭粓姝錛欳trl+c
濡傛灉璁╃▼搴忓嬬粓鍦ㄥ悗鍙版墽琛岋紝鍗充嬌鍏抽棴褰撳墠鐨勭粓絝涔熸墽琛岋紙涔嬪墠鐨&鍋氫笉鍒幫級錛岃繖鏃跺欓渶瑕乶ohup銆傝ュ懡浠ゅ彲浠ュ湪浣犻鍑哄笎鎴/鍏抽棴緇堢涔嬪悗緇х畫榪愯岀浉搴旂殑榪涚▼銆
鍏抽棴涓鏂鍚庯紝鍦ㄥ彟涓涓緇堢痡obs宸茬粡鏃犳硶鐪嬪埌鍚庡彴璺戝緱紼嬪簭浜嗭紝姝ゆ椂鍒╃敤ps錛堣繘紼嬫煡鐪嬪懡浠わ級
濡備笂鎵紺猴細
nohup 鍜 & 緇勫悎浜嗗悗鍙拌繍琛岀▼搴忋
鍙浠ヨ緭鍑哄埌 out.log淇濆瓨紼嬪簭杈撳嚭錛屼篃鍙浠ヨ緭鍑哄埌/dev/null 鍗崇┖璁懼囷紝涓嶄繚瀛樿緭鍑恆
涓婇潰涓夌嶆柟寮忔棤璁哄湪nohup.out 鎴杢est.out閮界湅涓嶅埌鏁版嵁緇撴灉錛岃繖鏄鍥犱負python鎵ц屾湁緙撳瓨杈撳嚭
瑙e喅
鏂扮殑鎺ュ彛鎺ュ叆鏌ョ湅紼嬪簭
浣跨敤&鍚庡彴榪愯岀▼搴忥細
緇撴灉浼氳緭鍑哄埌緇堢
浣跨敤Ctrl + C鍙戦丼IGINT淇″彿錛 紼嬪簭鍏嶇柅
鍏抽棴session鍙戦丼IGHUP淇″彿錛 紼嬪簭鍏抽棴
浣跨敤nohup榪愯岀▼搴忥細
緇撴灉榛樿や細杈撳嚭鍒皀ohup.out
浣跨敤Ctrl + C鍙戦丼IGINT淇″彿錛 紼嬪簭鍏抽棴
鍏抽棴session鍙戦丼IGHUP淇″彿錛 紼嬪簭鍏嶇柅
騫蟲棩綰誇笂緇忓父浣跨敤nohup鍜&閰嶅悎鏉ュ惎鍔ㄧ▼搴忥細
鍚屾椂鍏嶇柅SIGINT鍜孲IGHUP淇″彿
鍚屾椂錛岃繕鏈変竴涓鏈浣沖疄璺碉細
涓嶈佸皢淇℃伅杈撳嚭鍒扮粓絝鏍囧噯杈撳嚭錛屾爣鍑嗛敊璇杈撳嚭錛岃岃佺敤鏃ュ織緇勪歡灝嗕俊鎮璁板綍鍒版棩蹇楅噷
nohup鍜&絀剁珶鏈夊暐鍖哄埆
2. Linux普通用戶運行串口
將USB串口設備插入USB口後,會在/dev/目錄下生成/dev/ttyUSB0文件(也可能為/dev/ttyUSB1,/dev/ttyUSB2...),
查看此文件
輸出為:
c說明表明設備為字元設備文件(d表示目錄文件,-表示普通文件,l表示鏈接文件,b表示塊文件),
其中rw-rw----表示root用戶作為文件所有者可以讀和寫,dialout用戶組內的用戶可以讀和寫,其他用戶不允許讀、寫和執行(r表示可讀,w表示可寫,x表示可執行)
因此,需要將當前用戶增加到dialout用戶組中
3. linux後台執行命令
搜索nohup
nohup
nohup 命令
用途:LINUX命令用法,不掛斷地運行命令。
語法:nohup Command [ Arg ... ] [ & ]
描述:nohup 命令運行由 Command 參數和任何相關的 Arg 參數指定的命令,忽略所有掛斷(SIGHUP)信號。在注銷後使用 nohup 命令運行後台中的程序。要運行後台中的 nohup 命令,添加 & ( 表示「and」的符號)到命令的尾部。
如果不將 nohup 命令的輸出重定向,輸出將附加到當前目錄的 nohup.out 文件中。如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。如果沒有文件能創建或打開以用於追加,那麼 Command 參數指定的命令不可調用。如果標准錯誤是一個終端,那麼把指定的命令寫給標准錯誤的所有輸出作為標准輸出重定向到相同的文件描述符。
退出狀態:該命令返回下列出口值:
126 可以查找但不能調用 Command 參數指定的命令。
127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。
否則,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。
nohup命令及其輸出文件
nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。nohup就是不掛起的意思( n ohang up)。
該命令的一般形式為:nohup command &
使用nohup命令提交作業
如果使用nohup命令提交作業,那麼在預設情況下該作業的所有輸出都被重定向到一個名為 nohup.out的文件中,除非另外指定了輸出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,輸出被重定向到myout.file文件中。
使用 jobs 查看任務。
使用 fg %n 關閉。
另外有兩個常用的ftp工具ncftpget和ncftpput,可以實現後台的ftp上傳和下載,這樣我就可以利用這些命令在後台上傳和下載文件了。
4. Linux進程後台運行的幾種方式
Ctrl+z/bg/nohup/setsid/&
在Linux中,如果要讓進程在後台運行,一般情況下,我們在命令後面加上&即可,實際上,這樣是將命令放入到一個作業隊列中了:
./rsync.sh jobs
但是如上方到後台執行的進程,其父進程還是當前終端shell的進程,而一旦父進程退出,則會發送hangup信號給所有子進程,子進程收到hangup以後也會退出。如果我們要在退出shell的時候繼續運行進程,則需要使用nohup忽略hangup信號,或者setsid將將父進程設為init進程(進程號為1):對於已經在前台執行的命令,也可以重新放到後台執行,首先按ctrl+z暫停已經運行的進程,然後使用bg命令將停止的作業放到後台運行:bg %1,放回前台運行:%1。
# nohup ./rsync.sh setsid ./rsync.sh &或
# (./rsync.sh &) ////在一個subshell中執行# ps -ef|grep rsync
nohup 的用途就是讓提交的命令忽略 hangup 信號,標准輸出和標准錯誤預設會被重定向到 nohup.out 文件中。。一般我們可在結尾加上」&」來將命令同時放入後台運行,也可用」 > log.out 2>&1」來更改預設的重定向文件名。
上面的試驗演示了使用nohup/setsid加上&使進程在後台運行,同時不受當前shell退出的影響。那麼對於已經在後台運行的進程,該怎麼辦呢?可以使用disown命令:
# jobs
# disown -h %1# ps -ef|grep rsync
效果與setid相同,但是disown後無法通過jobs命令查看了。
screen
還有一種更加強大的方式是使用screen,首先創建一個斷開模式的虛擬終端,然後用-r選項重新連接這個虛擬終端,在其中執行的任何命令,都能達到nohup的效果,這在有多個命令需要在後台連續執行的時候比較方便。
GNU Screen是一款由GNU計劃開發的用於命令行終端切換的自由軟體。用戶可以通過該軟體同時連接多個本地或遠程的命令行會話,並在其間自由切換,可以看作是窗口管理器的命令行界面版本。它提供了統一的管理多個會話的界面和相應的功能。
# yum install screen -y
常用screen參數:
# screen -S docker-d 新建一個名叫docker-d的session,並馬上進入
# screen -dmS docker-d 新建一個名叫docker-d的session,但暫不進入,可用於系統啟動腳本里
# screen -ls 列出當前所有session
# screen -r docker-d 恢復到zhouxiao這個session,前提是已經是斷開狀態(-d可以遠程斷開會話)
# screen -x docker-d 連接到離線模式的會話(多窗口同步演示)
# screen ./rsync.sh screen創建一個執行腳本的單窗口會話,可以attach進程ID
# screen -wipe 檢查目前所有的screen作業,並刪除已經無法使用的screen作業
正常情況下,當你退出一個窗口中最後一個程序(通常是bash)後,這個窗口就關閉了。另一個關閉窗口的方法是使用C-a k,這個快捷鍵殺死當前的窗口,同時也將殺死這個窗口中正在運行的進程。
在每個screen session 下,所有命令都以 ctrl+a(C-a) 開始。
C-a w 顯示所有窗口列表
C-a k 這個快捷鍵殺死當前的窗口,同時也將殺死這個窗口中正在運行的進程。
C-a d detach,暫時離開當前session
上面只是基本也是最常用的用法,更多請參考man screen或linux screen 命令詳解。需要了解的是,一個用戶創建的screen,其他用戶(甚至root)通過screen -ls是看不見的。另外,Ctrl+a在bash下是用來回到行開頭,不幸與上面的組合快捷鍵沖突。