Command

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

  • January 9, 2015

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

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

但是,如果我從終端執行它們中的每一個,它們確實會出現在“工作”中

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

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

為什麼?因為目前的 shell 可以有自己的工作 #1。UNIX/Linux 維護所謂的程序組或會話。會話的組長是擁有 tty 並通過鍵盤與之互動的程序。在您的手冊中查找 setsid() 函式的描述。如果該程序已啟動並且仍然在舊的父 shell(領導者)下作為子程序執行,則作業命令將起作用。否則沒有。

引用自:https://unix.stackexchange.com/questions/178322