Léo*_* 준영 10 background stdout
问题很特殊,因为某些键(例如CTRL + Z)停止工作.
我尝试通过输入顺序将过程置于后台:
- 找/
- CTRL + Z
- BG
但是,我仍然可以看到标准输出.仅执行第一步的唯一区别是命令CTRL + Z不再起作用.当我有未保存的工作并且我的硬盘超过100GB时,这是相当讨厌的.所以
我该如何将流程置于后台?
[细节]
我在Mac上使用第四版Bash.
[尼古拉斯·赖利的克鲁克斯回复]
问题实际上是我不理解运行流程背景的"后果".我无法理解为什么commnands(如CTRL + Z)不适用于后台进程.我仍然可以使用以下命令在另一个shell中终止进程:
ps -ej | awk '! /grep/ && /find/ {print $2}' | xargs kill -9
Run Code Online (Sandbox Code Playgroud)
Nic*_*ley 12
^Z因为最前面的作业现在是shell,而shell通常不会响应,所以无法正常工作SIGTSTP.(如果你真的想暂停一个非登录shell,suspend通常会工作.)
问题似乎是你误解了后台工作的后果.重定向作业的标准输出是不相关的.
事实上,目前还不清楚是什么,你想做的事情.如果你只是想停止find运行,那么fg它和使用^C或^\(默认分别发送SIGINT和SIGQUIT).
如果你想继续find运行但是抑制它的进一步输出,那么我能想到的最简单的解决方案就是使用bg ; disown ; exit.这将阻止shell杀死其子进程(find)并退出shell; 假设它位于终端窗口的顶层,你会看到更多输出并find继续运行(但你无法与它进行交互).
我用disown.
find / & disown
exit # close the terminal and the command still runs
Run Code Online (Sandbox Code Playgroud)
您也可以在^ Z之后使用disown:
find /
^Z
bg
disown
exit
Run Code Online (Sandbox Code Playgroud)
我相信,disown是一个内置的bash.不确定其他炮弹的替代品.
有关详细信息,请参阅服务器故障的等效答案.
您可以在任何类UNIX系统上将操作设置为具有stty的其他键.
$ stty susp Q
Run Code Online (Sandbox Code Playgroud)
将Q作为暂停键代替CTRL-Z.
后台进程不会断开终端设备的输出,这就是为什么你仍然看到输出,输出可能包含控制字符,这可能会填补你的TTY设置(cat二进制文件是一个很好的方法).
如果您希望作业在后台运行,请执行以下操作:
find / >/tmp/out 2>&1 &
Run Code Online (Sandbox Code Playgroud)
然后在/tmp/out文件结束时检查文件.
| 归档时间: |
|
| 查看次数: |
21767 次 |
| 最近记录: |