为什么作业不列出脚本中的命令

为什么作业不列出脚本中的命令

我有一个在后台运行一些程序的脚本,但运行后,它们没有被命令“jobs”列出。为什么是这样?

(./m_prog -t m_prog1 m_config) &
(./m_prog  -t m_prog2  m_config) &
(./m_prog  -t m_prog3  m_config) &

但如果我从终端执行它们中的每一个,它们确实会出现在“作业”中

如何从脚本中运行的命令获得相同的效果?

答案1

jobs 仅适用于创建作业的 shell 的实例化。 jobs n使用数字而不是 pid。一旦 shell 在脚本(另一个新进程)内运行,启动该脚本的旧 shell、作业(在旧 shell 中发出)将不再可以在新 shell 中引用作业#1。

为什么?因为当前的 shell 可以有自己的工作 #1。 UNIX/Linux 维护所谓的进程组或会话。会话的组长是拥有 tty 并通过键盘与其交互的进程。在手册中查找setsid()函数的描述。如果进程已启动并且仍作为子进程在旧的父 shell(领导者)下运行,则 jobs 命令将起作用。否则不行。

相关内容