![& バックグラウンドでコマンドを実行する](https://rvso.com/image/154486/%26%20%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E3%81%A7%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%20.png)
走るとき
$ ls -R / &
(プロセスをバックグラウンドに追いやるはずの)にもかかわらず、&
システムの一覧全体をじっくり見る必要があります。CTRL+C または CTRL+Z を押しても効果がありません。何が間違っているのでしょうか?
答え1
バックグラウンドで起動するとls -R /
、コマンドはすぐに開始され、制御は呼び出し元のシェル (対話型シェル) に戻ります。ただし、の標準出力ストリームと標準エラー ストリームはls
ターミナルに接続されたままなので、コマンドの出力はターミナルに表示されます。
コメントでコマンドの出力を/dev/null
ターミナルに流さないようにリダイレクトできることを知っていることを示すフォローアップの質問をします。
ls -R / >/dev/null 2>&1 &
続く質問は、「Exit 1
でジョブのステータスを確認すると、なぜ が表示されるのですかjobs -l
。 」です。
から 0 以外の終了ステータスが返されるのls
は、完全に正常に実行されなかったためです。 正常に実行されなかったのは、システム全体のすべてのファイルを再帰的にリストしようとしたためであり、おそらく、システム上の一部のディレクトリは、コマンドを実行するために使用したユーザーによって読み取り可能ではないと考えられます。 標準エラー ストリームを にリダイレクトしていなかった場合/dev/null
(コマンド ラインから を削除して2>&1
)、おそらくターミナルにエラーが表示されていたでしょう。