如何在后台运行shell命令并禁止所有输出?

时间:2016-07-22 15:36:33

标签: bash macos shell terminal gulp

我试图编写一个Shell脚本(用于Mac OSX Termninal),它将运行一个命令来启动开发服务器(gulp serve)。我有它工作,除了服务器持续运行所以它不允许我在同一窗口中输入后续命令而不停止服务器(Control + C)。我的问题是,有没有办法在后台运行流程和/或抑制任何/所有输出?我的目标是写一个“停止服务器”。将杀死进程的命令(我也不确定该怎么做)。我已经尝试过使用&符号和&> / dev / null的所有组合,但没有任何效果。这就是我到目前为止所拥有的:

mouseup

2 个答案:

答案 0 :(得分:2)

您正在killall上进行输出重定向,而不是gulp,因此gulp将继续快速地将文本拆分到您的终端。请尝试改为:

cd / && gulp server --gulpfile /server/example/gulpfile.js >/dev/null 2>&1 &

其次,你的kill命令不会杀死你的进程,因为你没有告诉它;你要求它杀死所有tail进程。你想要的是:

killall gulp

这些修改应该是实现目标的最直接途径。但是,还有一些额外的事情可能有用。

流程管理在* nix世界中有着悠久的历史,因此我们一直在发明工具,以便在很长一段时间内实现这一目标。您可以自己重新发明它们(下一步是存储您的gulp过程的PID,以便您可以确保只杀死它而不是名称中的“gulp”其他任何东西),或者您可以全部方式并编写系统监控文件。对于Linux,这将是SysV,Upstart或systemd;我不确定OS X的等价物是什么。

但是,由于您只是为了开发目的而不是生产网站,因此您可能实际上并不需要这样做;您的实际目标是能够在gulp运行时执行ad-hoc shell命令。您可以使用终端选项卡执行此操作,或者更优雅地使用iTerm,screentmux的拆分功能。特别是Tmux是一个有用的工具,当你发现自己在终端中工作很多时,熟悉它是一件有用的事情。

答案 1 :(得分:1)

首先,在后台运行该过程

cd / && gulp serve --gulpfile /server/example/gulpfile.js > /tmp/gulp.log &

cd之后,您需要&&(和)和&在后​​台运行。

杀死所有gulp进程

killall gulp
相关问题