Bash

為什麼“nohup”和“disown”在 SoX 上不起作用(呼叫為“play”)

  • November 4, 2018

我可以執行這個命令:

$ play mylist.m3u

和音樂播放。

然後我可以按 Ctrl-Z 暫停作業,然後發出bg讓它在後台執行。

但是,如果我然後執行disownand exit,音樂將停止播放,即使該play命令仍顯示在ps.

我希望音樂繼續播放。

也很有趣

我執行命令

$ play mylist.m3u &

音樂不播放。作業顯示為stopped狀態。

我也可以執行命令

$ nohup play mylist.m3u &

並且沒有音樂播放 - 工作立即停止。

然而,

$ nohup play mylist.m3u

確實有音樂播放,但我不能像以前一樣否認它。


似乎所有這些都是相關的。

disown大多數程序在ed 或 run through時表現良好nohup,但不是 SoX。

有誰知道為什麼?

SoX 想要/需要輸入和輸出…通過在控制台中鍵入“play xxxx”,您可以正常執行它,並連接了標準輸入和標準輸出(和標準錯誤)。

當您後台作業(使用&)時,它會啟動,然後暫停,因為它正在等待訪問標準輸入和標準輸出。

當你’nohup’工作時也會發生同樣的事情。如果它需要鍵盤輸入,它會“阻塞”,並被系統暫停,直到它接收到對標準輸入的訪問權。

放棄程序有效地將其與連接到啟動程序的控制台的標準輸入和標準輸出斷開。

它仍在“執行”,但被系統阻止(暫停),因為它正在等待訪問標準輸入和標準輸出。

對於像我一樣遇到這個問題並最終設法在Google上搜尋與棒球無關的東西*並想要一個實際解決方案的少數人:

$ play whatever.wav &>/dev/null </dev/null &

它在後台執行而不會停止。

波士頓紅襪隊**打棒球*,顯然有些球員更喜歡出風頭而不是背景。嘰。

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