我该如何处理已停止并且除非置于前台否则无法继续的作业?

我该如何处理已停止并且除非置于前台否则无法继续的作业?

最近的例子:mountlo(使用 UML):

vi@vi-notebook:~/b$ mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other&
[1] 32561
vi@vi-notebook:~/b$ 检查 ptrace 是否可以更改系统调用号...OK
检查 ptrace 的系统调用模拟补丁...OK
检查 ptrace 的高级系统调用模拟补丁...OK
检查 /tmp 中的 PROT_EXEC mmap...OK
检查主机中的 skas3 补丁:
  - /proc/mm...未找到
  -PTRACE_FAULTINFO...未找到
  -PTRACE_LDT...未找到
SKAS0 模式下运行的 UML


[1]+ 已停止 mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other
vi@vi-notebook:~/b$ bg
[1]+ mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other &

[1]+ 已停止 mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other
vi@vi-notebook:~/b$ bg
[1]+ mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other &

[1]+ 已停止 mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other
vi@vi-notebook:~/b$ bg
[1]+ mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other &

[1]+ 已停止 mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other
vi@vi-notebook:~/b$ fg
mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other
Linux 版本 2.6.15 (miko@dorka) (gcc 版本 3.3.5 (Debian 1:3.3.5-13)) #1 2006 年 2 月 27 日星期一 13:27:52 CET
(正常输出)
...

vi @ vi-notebook:〜/ b $ socat - exec:'mountlo -m 16 -d / dev / uba1 / home / vi / mnt / usb -t vfat -o iocharset = utf8 \,allow_other',pty,ctty
fusermount:waitpid:没有子进程
vi@vi-notebook:~/b$

Gimp 也会出现这种情况(当它运行其插件时)。由“gimp q.jpg&”启动的 Gimp 部分会冻结,除非“killall -CONT”或将其置于前台,否则无法继续。

这是错误吗?如何可靠地在后台启动程序?

答案1

这可能不是一个错误。有时程序想要或需要与标准输入 (STDIN) 通信。例如,它可能想要提出一个问题。但除非程序在前台运行,否则无法执行此操作,因此您会收到“已停止”通知。然后,您可以使用“fg”将其带到前台。有时它可以从某个文件重定向标准输入,但您可能需要知道要将什么放入该文件中。您可以尝试从 /dev/null 重定向,即使程序在后台运行,它也应该始终可用。要使用从 /dev/null 重定向的 STDIN 运行,您可以执行以下操作:

$ program arg1 arg2 arg3 ... </dev/null

有时程序会坚持要求 STDIN 为终端,因此这可能行不通,而且如果程序需要一些数据,它可能无法正常工作。最重要的是,有些程序希望以交互方式工作,在后台运行时无法正常工作。

相关内容