SoXで「nohup」と「disown」が機能しない理由(「play」と呼ばれる)

SoXで「nohup」と「disown」が機能しない理由(「play」と呼ばれる)

次のコマンドを実行できます。

$ play mylist.m3u

音楽が始まります。

その後、Ctrl-Z を押してジョブを一時停止し、コマンドを実行してbgバックグラウンドで実行できるようにします。

ただし、実行しdisownexit音楽の再生を停止すると、playコマンドが表示され続けるのにも同じですps

音楽が流れ続けてほしいです。

また非常に興味深い

私はコマンドを実行します

$ play mylist.m3u &

果たして音楽いいえ遊ぶ。ジョブがステータスstoppedとして表示されます。

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

$ nohup play mylist.m3u &

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

しかし、

$ nohup play mylist.m3u

実際に音楽が再生されていましたが、以前のように否定することはできませんでした。


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

ほとんどのプログラムはdisownedまたはRuntimeではうまく機能しますnohupが、SoXではうまく機能しません。

理由を知っている人はいますか?

答え1

私のように、この問題に直面して、最終的に野球に関連していないものをGoogleで検索し、実際の解決策を望む珍しい人のために:

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

停止せずにバックグラウンドで実行されます。

*この赤レッドソックスボストン遊ぶ野球では、一部の選手は注目されるよりも注目されることを好むようです。背景。あいまいだ。

答え2

SoXは入力と出力を必要とします...コンソールに「play xxxx」と入力して正常に実行でき、stdinとstdout(およびstderr)の両方が接続されます。

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

ジョブを「nohup」しても同じことが起こります。キーボード入力が必要な場合は、標準入力にアクセスするまでシステムによって「ブロック」され、一時停止されます。

プロセスを拒否すると、プロセスを開始したコンソールに接続されている標準入力と標準出力からそのプロセスが効果的にブロックされます。

それでも「実行中」ですが、標準入力と標準出力へのアクセスを待っているため、システムによってブロック(一時停止)されます。

答え3

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

$ play filename -q &

関連情報