為什麼作業不列出腳本中的指令

為什麼作業不列出腳本中的指令

我有一個在後台運行一些程式的腳本,但運行後,它們沒有被命令“jobs”列出。為什麼是這樣?

(./m_prog -t m_prog1 m_config) &
(./m_prog  -t m_prog2  m_config) &
(./m_prog  -t m_prog3  m_config) &

但如果我從終端執行它們中的每一個,它們確實會出現在「作業」中

如何從腳本中執行的命令獲得相同的效果?

答案1

jobs 僅適用於建立作業的 shell 的實例化。 jobs n使用數字而不是 pid。一旦 shell 在腳本(另一個新進程)內執行,啟動該腳本的舊 shell、作業(在舊 shell 中發出)將不再可以在新 shell 中引用作業#1。

為什麼?因為目前的 shell 可以有自己的工作 #1。 UNIX/Linux 維護所謂的進程組或會話。會話的組長是擁有 tty 並透過鍵盤與其互動的進程。在手冊中找出setsid()函數的描述。如果進程已啟動並且仍作為子進程在舊的父 shell(領導者)下運行,則 jobs 命令將起作用。否則不行。

相關內容