如何将所有bash进程作为后台运行?

时间:2014-09-24 09:23:15

标签: bash shell

我不认为在前台运行进程是有用的。所以我想在后台运行所有进程。那可能吗? 还告诉我是否存在与此相关的任何问题。

3 个答案:

答案 0 :(得分:3)

您可以调整此问题的代码:https://superuser.com/questions/175799/does-bash-have-a-hook-that-is-run-before-executing-a-command

基本上,这会使用DEBUG陷阱在您在命令行上输入的任何内容之前运行命令。所以,这个:

preexec () { :; }
preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
    local this_command=$(HISTTIMEFORMAT= history 1);
    preexec "$this_command" &
}
trap 'preexec_invoke_exec' DEBUG

运行命令,但之后使用&,后台处理。

请注意,这将对您的终端产生其他相当奇怪的影响,任何应该在前台运行的东西(命令行浏览器,邮件阅读器,交互式命令,任何需要输入的内容等)都会出现问题。

只需输入bash即可执行此操作,这将执行另一个shell。粘贴上面的代码,如果事情开始变得怪异,只需exit从shell中解决,事情就会重置。

答案 1 :(得分:0)

你的意思是bash脚本吗? Jush最后添加&。示例:

$ ./myscript &

答案 2 :(得分:0)

虽然可能像@pgl建议的那样做一些聪明的事情,但这并不是一个好主意。在后台运行的进程不会以有用的方式向您显示其输出。因此,如果所有进程都自动发送到后台,您的终端将充斥着各种标准输出和标准错误消息,但您将无法知道什么来自什么,您的终端将是无用的,随之而来的是混乱

所以,是的,有一个很好的理由让流程保持在前台:看看他们正在做什么,并能够轻松地控制它们。为了给出一个更具体的例子,任何需要你与它交互的程序都不能在后台运行。这包括要求Continue [Y/N]?的内容或sudo要求您输入密码的内容。如果你只是盲目地让一切都在后台运行,那么这些命令就会默默地挂起。