web-dev-qa-db-ja.com

「Nohup」と「disown」がSoXで機能しないのはなぜですか(「play」として呼び出されます)

このコマンドを実行できます:

$ play mylist.m3u

そして音楽が流れます。

次に、Ctrl-Zを押してジョブを一時停止し、bgを発行してバックグラウンドで実行します。

ただし、次にdisownexitを実行すると、playコマンドがpsに表示されていても、音楽の再生が停止します。

私は音楽が再生され続けることを期待します。

これも面白い

コマンドを実行します

$ play mylist.m3u &

音楽は再生されません再生されません。ジョブはstoppedステータスとして表示されます。

コマンドを実行することもできます

$ Nohup play mylist.m3u &

そして、音楽は再生されません-ジョブはすぐに停止します。

しかしながら、

$ Nohup play mylist.m3u

音楽は再生されますが、以前のように私はそれを否定することはできません。


これらはすべて関連しているようです。

ほとんどのプログラムは、disownedまたはNohupを実行すると正常に動作しますが、SoXでは動作しません。

誰かが理由を知っていますか?

4
jwd

SoXは入力と出力を必要とします...コンソールで「playxxxx」と入力すると、stdinとstdout(&stderr)がすべて接続された状態で、通常どおり実行されます。

ジョブをバックグラウンドで実行すると(&を使用)、ジョブが開始され、stdinとstdoutへのアクセスを待機しているため一時停止されます。

あなたが仕事を「Nohup」したときにも同じことが起こります。キーボード入力が必要な場合は、「ブロック」され、stdinへのアクセスを受信するまでシステムによって一時停止されます。

プロセスの所有権を剥奪すると、プロセスを開始したコンソールに接続されていたstdinおよびstdoutからプロセスが効果的に切り離されます。

まだ「実行中」ですが、stdinとstdoutへのアクセスを待機しているため、システムによってブロック(一時停止)されます。

1
lornix

私のように、両方ともこの問題を抱えていて、最終的に野球*ではない何かをグーグルで検索し、実際の解決策を求めている珍しい人のために:

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

それは停止することなくバックグラウンドで実行されます。

*ボストンの赤Soxplay野球、そして明らかに一部のプレーヤーはbackgroundよりも脚光を浴びることを好みます。不平を言う。

7
tex

-qオプションを使用して、/ dev/nullにリダイレクトせずに、SoXがstd-whateverに書き込まないようにすることもできます。

$ play filename -q &
0
uyjulian