在 bash 中,set +m
应该关闭监控模式。我希望这是默认行为,并将该行放在.bashrc
文件.bashrc
已读取(在其旁边添加一行echo "hello"
),但仍会出现已终止作业的通知。这是为什么?
答案1
因为作业通知与交互模式相关,而不是监控模式。对它的作用的描述set -m
相当具有误导性。它有许多影响,例如强制管道在其自己的进程组中运行,并导致 CHLD 上的陷阱为每个后台进程触发。它实际上不会对“作业控制”是否有效产生任何影响。只要set +m
您的操作系统支持作业控制,您仍然可以使用所有与作业相关的命令并使用 jobspecs 引用作业。
ksh 也是如此。我不知道有什么方法可以禁用或隐藏作业通知。如果 Bash 以交互模式启动,您将始终看到它们,即使您随后set +i
(据我所知,启动后没有影响)。我发现这set +b
会让事情稍微好受一些。如果您正在编写一个利用作业控制进行花哨的多处理的脚本,那么您无论如何都不必担心它。