プロセスをバックグラウンドに置き、1つのコマンドで操作を実行します。

プロセスをバックグラウンドに置き、1つのコマンドで操作を実行します。

おそらく、スクリプトを使用する方が簡単ですが、なぜコマンドではできないのでしょうか。私が今まで試したこと:

$ (ls >/dev/null &) && echo $!
3135
$ (ls >/dev/null &) ; echo $! #bad idea, but if that worked, I could just add `sleep 0.1`
3135
$ ls >/dev/null & ; echo $!
bash: syntax error near unexpected token `;'
$ `ls >/dev/null &` && echo $!
3135
$ `ls >/dev/null &` ; echo $!
3135

この3135数値は、この変数を保存した最後のバックグラウンドプロセスのPID$!であり、変更されません。(私はまた、Konsoleを使用してプロセスを正常にバックグラウンド化するために、次の内容を印刷します[1] PID。ああ、実行されたコマンドのどれもプロセスをバックグラウンドに送信しませんでした。

答え1

これにより、目的のタスクが実行されます。

$ ls > /dev/null & echo $!

さまざまな方法でバックグラウンドコマンドをサブプロセスに強制するため、最初のシェルにはバックグラウンドプロセスがないため、更新され$!ません。

これで、同じシェルでバックグラウンドプロセスが開始され、必要な操作を実行echo $!できるようになります。

関連情報