Kar*_*and 8 shell job-control jobs
我在使用分号分隔的命令行上运行多个命令:
cmd1; cmd2; cmd3
如果我在上面按Ctrl+ C,它会杀死所有命令,而不仅仅是当前正在执行的命令。
kartik@kartikpc:~/junk/exp$ ls
test1 test2
kartik@kartikpc:~/junk/exp$ cat; ls
cat is running
cat is running
^C
kartik@kartikpc:~/junk/exp
Run Code Online (Sandbox Code Playgroud)
但是Ctrl+Z只会暂停当前进程并继续下一个进程。
kartik@kartikpc:~/junk/exp$ ls
test1 test2
kartik@kartikpc:~/junk/exp$ cat; ls
cat is running
cat is running
^Z
[1]+ Stopped cat
test1 test2
kartik@kartikpc:~/junk/exp$
Run Code Online (Sandbox Code Playgroud)
为什么行为存在差异,有没有办法让Ctrl+C表现得像Ctrl+ Z?
我实际上是通过 tmux 会话运行服务器,如下所示node app.js; $bash,当我执行Ctrl+C来杀死服务器时,它也会杀死 bash。我想回到贝壳。有没有其他选择来实现我想要的行为?
[更新]
tcsh与Ctrl+C和Ctrl+ 的行为相同Z。它总是对所有命令起作用,就像 bash 对 onlt Ctrl+所做的那样C。但带回工作fg只会带回cat而不是ls。
[kartika@vm-kartika-vnc ~/junk]$ ls
file1 file2
[kartika@vm-kartika-vnc ~/junk]$ echo $SHELL
/bin/tcsh
[kartika@vm-kartika-vnc ~/junk]$ cat; ls
cat is running
cat is running
^C
[kartika@vm-kartika-vnc ~/junk]$ cat ; ls
cat is running
cat is running
^Z
Suspended
[kartika@vm-kartika-vnc ~/junk]$ jobs
[1] + Suspended cat
[kartika@vm-kartika-vnc ~/junk]$ fg
cat // Pressing ctrl-d here to exit cat
[kartika@vm-kartika-vnc ~/junk]$
Run Code Online (Sandbox Code Playgroud)
系统信息:
kartik@kartikpc:~/junk/exp$ uname -a
Linux kartikpc 3.13.0-70-generic #113-Ubuntu SMP Mon Nov 16 18:34:13 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
kartik@kartikpc:~/junk/exp$ echo $SHELL
/bin/bash
Run Code Online (Sandbox Code Playgroud)
您需要查找 bash 作业控件。这里有一个不错的解释:http : //web.mit.edu/gnu/doc/html/features_5.html
但简而言之,Ctrl+C将终止命令(所有行),Ctrl+Z将使正在运行的命令成为后台。在您的情况下,它正在后台运行cat(抑制输出并停止处理),然后继续运行该ls命令。
您可以通过检查进程列表来确认这一点,您会发现您cat的仍在列表中。
要将这项工作带到前台,请查看fg命令。
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |