将进程置于后台并使用一个命令执行某些操作

将进程置于后台并使用一个命令执行某些操作

可能只使用脚本会更容易,但我想知道为什么不能用一个命令来做到这一点。到目前为止我已经尝试过:

$ (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 $!

由于您以各种方式强制将后台命令放入子进程中,因此第一个 shell 没有任何后台进程,因此$!未更新。

现在,后台进程由同一个 shell 启动,echo $!现在它可以执行您想要的操作。

相关内容