所以,我有一些这样的工作:
sleep 30 | sleep 30 &
Run Code Online (Sandbox Code Playgroud)
自然的思考方式是:
kill `jobs -p`
Run Code Online (Sandbox Code Playgroud)
但这只会杀死第一个sleep
而不是第二个。
这样做会杀死两个进程:
kill %1
Run Code Online (Sandbox Code Playgroud)
但是,如果有很多这样的工作在运行,那最多只会杀死一项工作。
它不应该终止具有相同名称但不在此 shell 中运行的进程。
有没有办法读取管道缓冲区中已有的所有内容,将它们通过管道传输到另一个程序,然后立即退出而无需等待更多输入?
它必须是二进制安全的。可以要求安装其他程序。
例如,下面的命令应该输出a
and not b
,并在第二个回声上引发 SIGPIPE (至少如果系统没有太多负载):
{ echo a; sleep 2s; echo b;} | { sleep 1s; my_command;}
Run Code Online (Sandbox Code Playgroud) 我可以使用以下方法禁用键盘或鼠标:
xinput disable <device>
Run Code Online (Sandbox Code Playgroud)
但是我怎么知道一个设备以前是否在命令行中被禁用?