1. 程式人生 > >Linux shell中執行可執行程式後加上&的作用

Linux shell中執行可執行程式後加上&的作用

學習UNP時,學到了在命令後加上字元“&”後,退出shell,執行的命令可以繼續執行。不解原因,併到網上搜索了以下,明白了!

以下是搜尋到的片段:

& 放在啟動引數後面表示設定此程序為後臺程序

預設情況下,程序是前臺程序,這時就把Shell給佔據了,我們無法進行其他操作,對於那些沒有互動的程序,很多時候,我們希望將其在後臺啟動,可以在啟動引數的時候加一個'&'實現這個目的。

如:

tianfang > run &
    [1]11319
tianfang > ./game.e 1 &

程序切換到後臺的時候,我們把它稱為job。切換到後臺時會輸出相關job資訊,以前面的輸出為

[1]11319例:[1]表示jobID是1,11319表示程序ID是11319。切換到後臺的程序,仍然可以用ps命令檢視。

前後臺間切換

可以通過bg (background)和fg(foreground)命令將其在前後臺間狀態切換。

守護程序

如果一個程序永遠都是以後臺方式啟動,並且不能受到Shell退出影響而退出,一個正統的做法是將其建立為守護程序。守護程序值得是系統長期執行的後臺程序,類似Windows服務。守護程序資訊通過ps–a無法檢視到,需要用到–x引數,當使用這條命令的時候,往往還附上-j引數以檢視作業控制資訊,其中TPGID一欄為-1就是守護程序。

    tianfang> ps xj
    PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
    953 1190 1190 1190 ? -1 Ss 1000 0:00 /bin/sh/usr/bin/startkde
    1 1490 1482 1482 ? -1 Sl 1000 0:00 /usr/bin/VBoxClient–seamless
    1 1491 1477 1477 ? -1 Sl 1000 0:00 /usr/bin/VBoxClient–display

建立守護程序最關鍵的一步是呼叫setsid函式建立一個新的Session,併成為SessionLeader。成功呼叫該函式的結果是:

  • 建立一個新的Session,當前程序成為SessionLeader,當前程序的id就是Session的id
  • 建立一個新的程序組,當前程序成為程序組的Leader,當前程序的id就是程序組的id
  • 如果當前程序原本有一個控制終端,則它失去這個控制終端,成為一個沒有控制終端的程序。
更多請參考:http://www.cnblogs.com/TianFang/archive/2013/01/23/2872645.html

相關推薦

linux shell的管道執行

linux shell中管道發揮的作用是檔案描述符重定向,例如 prog1 | prog2 | prog3,管道會將prog1的標準輸出重定向為prog2的標準輸入,將prog2的標準輸出重定向為prog3的標準輸入,prog1的標準輸入和 prog3的標準輸出並沒有改變。

Linux shell執行執行程式加上&的作用

學習UNP時,學到了在命令後加上字元“&”後,退出shell,執行的命令可以繼續執行。不解原因,併到網上搜索了以下,明白了! 以下是搜尋到的片段: & 放在啟動引數後面表示設定此程序為後臺程序 預設情況下,程序是前臺程序,這時就把Shell給佔據了,我們無法

linux Shell grep+wc取值在shell的結果與手動執行結果不一致的坑

vim restart.sh #!/bin/bash VDS=ps -ef |grep -w vds|grep -v grep|wc -l if [ $VDS -eq 0 ];thencd /usr/local/program;./linux-start.sh restartelseecho "It's

(zt)如何執行一個資源執行程式

2010年07月08日 15:29:00 zaijzhgh 閱讀數:511 標籤: exe null

linux——shell“.” 和 “./”執行的區別

linux 中在shell中使用 " . " 和  " ./ " 執行的區別 目前注意到的區別主要在於環境變數的作用域上: 1. 如果使用" ./ " 執行,可以理解為程式執行在一個全新的shell中,不繼承當前shell的環境變數的值, 同時若在程式中改變了當前shell中的

Xcode編譯完,在Finder檢視執行檔案路徑和沙盒路徑

截圖技巧:Mac自帶截圖快捷鍵Shift + Command + 3,按下這個組合鍵,圖片自動儲存到桌面。 選擇Xcode的Preferences選單 開啟後選擇“Locations”選項 開啟後的Finder 進入《DerivedData》目錄就可以找到你的工程,可

C# 基礎(十三)C# 軟體開發過程執行檔案.exe 出現bug,該怎麼排查、解決:找到出現bug的位置

一、簡介 之前是完成了寫軟體,從而實現軟體的基本功能。到了今天,需要對自己寫的可執行檔案.exe找bug了。那麼下面,我將結合自己的軟體的使用過程中,講自己的經驗融入進來,解釋下什麼是bug、以及該怎麼找Bug。 二、Bug的分類 主要參考: https://blog.csdn.ne

Linux:原始碼到執行檔案(CRF++ python安裝)

這一過程又稱為編譯軟體原始碼。編譯是將原始碼(程式語言描述)翻譯成計算機處理器能識別的語言的過程。一 語言發展phase1:機器語言(數值程式碼,二進位制指令。)phase2:組合語言(有一些人理解的符號)phase3:高階程式語言(我們現在使用的語言)二 編譯程式語言(1)

Linux執行執行檔案提示No such file or directory的解決方法

最近在使用Linux作業系統執行一個可執行檔案,結果出現了No such file or directory的提示,表示很疑惑。 ./tshrf bash: ./tshref: No such file or directory 檢視檔案資訊,可以看到

SHELL的非同步執行

非同步執行 有時我們希望同時執行多項任務,這其中涉及到父指令碼以及多個子指令碼的載入問題,子指令碼可以在父指令碼執行時執行其他額外的任務。但是,當一系列指令碼以這種方式執行時,保證父指令碼與子指令碼的協調一致就會是一個問題。試想下這樣一種情況,如果父指令碼與子

通過go語言執行執行程式並獲得命令列輸出的方法

首先,通過go語言執行可執行程式需要用到os/exec包 package exec import "os/exec" exec包執行外部命令 步驟: 寫一個go語言小程式並通過go build命令來編譯成可執行檔案p

如何在Linux系統下查詢執行檔案

可執行檔案是指可移植可執行的檔案,用於程式的執行,那麼Linux下要如何查詢可執行檔案呢? linux下查詢可執行檔案   ls -F|grep “*”   這樣就可以了! 如果要遞迴查詢,可以這樣: ls -FR|grep "*" 我們來看看ls -F的作用:

[轉]linux shell 獲取當前正在執行指令碼的絕對路徑

常見的一種誤區,是使用 pwd 命令,該命令的作用是“print name of current/working directory”,這才是此命令的真實含義,當前的工作目錄,這裡沒有任何意思說明,這個目錄就是指令碼存放的目錄。所以,這是不對的。你可以試試 bash shell/a.sh,a.sh 內

作業系統執行執行程式時,記憶體是如何分配的?

一般認為在c中分為這幾個儲存區:     1. 棧 --有編譯器自動分配釋放      2. 堆 -- 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由OS回收      3. 全域性區(靜態區) -- 全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全

面試知識點-- 作業系統執行執行程式時,記憶體分配是怎樣的?

一般認為在c中分為這幾個儲存區:     1. 棧 --有編譯器自動分配釋放      2. 堆 -- 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由OS回收      3. 全域性區(靜態區) -- 全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全

為什麼Linux和Windows的執行檔案不能通用?

主要的原因是格式不同和API不同,前者更重要一些。 一個可執行的二進位制檔案包含的不僅僅是機器指令,還包括各種資料、程式執行資源,機器指令只是其中的一部分。 一個可執行檔案要被執行的時候,作業系統需要為其分配資源,這些資源包括:記憶體空間(物理的和虛擬的),程序、執行緒資源等等,其中可執行檔案的機器指令

利用certutil.exe實現在批處理(bat)嵌入執行檔案或者各種媒體、圖片之類二進位制檔案的簡單方法

實際上利用certutil.exe 把二進位制檔案(包括各種檔案,exe可執行程式,圖片,聲音,mp3) 經過base64編碼為文字,可以實現把這些檔案嵌入到批處理程式碼中。 有什麼用?: 舉個例子,批處理經常需要依賴其它命令列工具實現自動化指令碼,如果把這

Linux執行執行檔案出現no such file or directory

有時在linux下執行可執行檔案***.sh出現erro: no such file or dierectory,解決步驟如下: (1)首先檢查路徑以及檔名是否正確; (2)確認是否有執行許可權; (3)檢查檔案格式是否正確,若為dos,需要修改為unix 方法:(3.1)

linux Shell程式設計--獲取命令執行返回結果

1.將命令執行的整型數字結果返回並賦值給變數。 使用反引號包裝命令字串 TAB上的` scarlett@scarlett-X550VXK:~$ line=`cat /etc/passwd| wc -

MATLAB生成exe脫離matlab執行執行程式

如何將MATLAB程式編譯成獨立可執行的程式?如何將編譯好的獨立可執行程式釋出在沒有安裝MATLAB的電腦上?下面將一步步實現: 一、生成獨立可執行的程式(exe檔案)步驟 1、安裝編譯器。可有