Linux常用命令及操作

2022-05-08 19:18:11 字數 3765 閱讀 1815

在命令結尾加」&」符號可以讓命令在後台執行,

這時可以看到乙個命令號和命令,後面是running,表示正在執行,

輸入fg即可將後台命令調回前台,

但如果有多個命令在後台執行,就需要jobs命令,

jobs命令可以列出所有在後台執行的命令及執行狀態,

這時使用fg空格後接命令號即可將對應的命令調回前台,

如果乙個命令已經在前台執行,又不想結束他,

按ctrl+z即可將命令移至後台,

但這是可以看到該命令的狀態是stopped,

這時可以使用bg空格後接命令號將命令置於runing狀態.

上面的方法雖然可以讓命令在後台執行,

但是退出登入或者關閉終端,後台的命令也會結束,

如果不想讓命令結束就需要nohup了,

在退出後仍想繼續執行的命令前面加上nohop空格借命令即可.

1、為什麼要使程式在後台執行

我們計算的程式都是週期很長的,通常要幾個小時甚至乙個星期。我們用的環境是用putty遠端連線到日本linux伺服器。所以使程式在後台跑有以下三個好處:

1:我們這邊是否關機不影響日本那邊的程式執行。(不會像以前那樣,我們這網路一斷開,或一關機,程式就斷掉或找不到資料,跑了幾天的程式只能重頭再來,很是煩惱)

2:不影響計算效率

2:讓程式在後台跑後,不會佔據終端,我們可以用終端做別的事情。

2、怎麼樣使程式在後台執行

方法1在終端輸入命令:

# ./pso > pso.file 2>&1 & 

解釋:將pso直接放在後台執行,並把終端輸出存放在當前目錄下的pso.file檔案中。

當客戶端關機後重新登陸伺服器後,直接檢視pso.file檔案就可看執行結果(命

令:#cat pso.file )。

方法2在終端輸入命令:

# nohup  ./pso > pso.file 2>&1 &

解釋:nohup就是不掛起的意思,將pso直接放在後台執行,並把終端輸出存放在當前

目錄下的pso.file檔案中。當客戶端關機後重新登陸伺服器後,直接檢視pso.file

檔案就可看執行結果(命令:#cat pso.file )。

3、常用任務管理命令

# jobs      //檢視任務,返回任務編號n和程序號

# bg  %n   //將編號為n的任務轉後台執行

# fg  %n   //將編號為n的任務轉前台執行

# ctrl+z    //掛起當前任務

# ctrl+c    //結束當前任務

注:如果要使在前天執行任務放到後台執行,則先要用ctrl+z掛起該任務,然後用bg使之後臺執行。

附:在linux中,如果要讓程序在後台執行,一般情況下,我們在命令後面加上&即可,實際上,這樣是將命令放入到乙個作業佇列中了:

$ ./test.sh & 

[1] 17208

$ jobs -l

[1]+ 17208 running ./test.sh &

對於已經在前台執行的命令,也可以重新放到後台執行,首先按ctrl+z暫停已經執行的程序,然後使用bg命令將停止的作業放到後台執行:

$ ./test.sh 

[1]+ stopped ./test.sh

$ bg %1 [1]+ ./test.sh &

$ jobs -l

[1]+ 22794 running ./test.sh &

但是如上方到後台執行的程序,其父程序還是當前終端shell的程序,而一旦父程序退出,則會傳送hangup訊號給所有子程序,子程序收到hangup以後也會退出。如果我們要在退出shell的時候繼續執行程序,則需要使用nohup忽略hangup訊號,或者setsid將將父程序設為init程序(程序號為1)

$ echo $$ 

21734

$ nohup ./test.sh &

[1] 29016

$ ps -ef | grep test

515 29710 21734 0 11:47 pts/12 00:00:00 /bin/sh ./test.sh

515 29713 21734 0 11:47 pts/12 00:00:00 grep test

$ setsid ./test.sh & 

[1] 409

$ ps -ef | grep test

515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh

515 413 21734 0 11:49 pts/12 00:00:00 grep test

上面的試驗演示了使用nohup/setsid加上&使程序在後台執行,同時不受當前shell退出的影響。那麼對於已經在後台執行的程序,該怎麼辦呢?可以使用disown命令:

$ ./test.sh & 

[1] 2539

$ jobs -l

[1]+ 2539 running ./test.sh &

$ disown -h %1

$ ps -ef | grep test

515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh

515 2542 21734 0 11:52 pts/12 00:00:00 grep test

另外還有一種方法,即使將程序在乙個subshell中執行,其實這和setsid異曲同工。方法很簡單,將命令用括號() 括起來即可:

$ (./test.sh &)  

$ ps -ef | grep test

515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh

515 12483 21734 0 11:59 pts/12 00:00:00 grep test

注:本文試驗環境為red hat enterprise linux as release 4 (nahant update 5),shell為/bin/bash,不同的os和shell可能命令有些不一樣。例如aix的ksh,沒有disown,但是可以使用nohup -p pid來獲得disown同樣的效果。

還有一種更加強大的方式是使用screen,首先建立乙個斷開模式的虛擬終端,然後用-r選項重新連線這個虛擬終端,在其中執行的任何命令,都能達到nohup的效果,這在有多個命令需要在後台連續執行的時候比較方便:

$ screen -dms screen_test  

$ screen -list there is a screen on:

27963.screen_test (detached) 1 socket in /tmp/uscreens/s-jiangfeng.

$ screen -r screen_test

linux常用命令及操作備忘

系統 web相關 檢視機器型號 root localhost home dmidecode grep product 檢視系統版本 root localhost home cat proc version 檢視centos版本 root localhost home lsb release a 檢視...

Linux常用命令操作

1.linux命令組成部分 命令字 執行的命令 命令選項 說明對命令的要求 命令引數 描述命令作用的物件 example command option arguments 命令選項或命令引數可有可無,命令的各組成部分之間用空格分開 1 1.命令提示符表示命令輸入的狀態 root locahost 表...

Linux 操作常用命令

1.新建操作 mkdir abc 新建乙個資料夾 touch abc.sh 新建乙個檔案 echo abc test.txt 新建乙個檔案,並將abc寫入。這裡用到了重定向符2.檢視類 2.1檢視目錄 ll 顯示目錄檔案詳細資訊 du h 檔案 目錄 檢視大小 pwd 顯示路徑2.2檢視檔案內容 c...