我有一个无限的NodeJS script.js
循环,我需要这个脚本来在后台执行另一个脚本作为服务,而这实际上是一个WebSocket服务。
var exec = require('child_process').exec;
exec('node bgService.js &');
因此,现在两个脚本都可以正常运行!
当我在Ctrl+C
上执行时script.js
,该bgService.js
脚本也会从我不想删除的内存中删除。
如何在后台运行某些东西而忘记?
您可以使用child_process.spawn和以下detached
选项来实现:
var spawn = require('child_process').spawn;
spawn('node', ['bgService.js'], {
detached: true
});
它将使子流程成为新流程组的领导者,因此它将在父流程退出后继续运行。
但是默认情况下,父进程将等待分离的子进程退出,并且还将监听其子进程stdio
。要将子进程与父进程完全分离,您应该:
stdio
进程与父进程分离,将其通过管道传输到某个文件或/dev/null
unref()
方法从父事件循环引用计数中删除子进程这是一个示例:
var spawn = require('child_process').spawn;
spawn('node', ['bgService.js'], {
stdio: 'ignore', // piping all stdio to /dev/null
detached: true
}).unref();
如果您不想丢失孩子的stdin
输出,则可以通过管道将其输出到某些日志文件中:
var fs = require('fs'),
spawn = require('child_process').spawn,
out = fs.openSync('./out.log', 'a'),
err = fs.openSync('./out.log', 'a');
spawn('node', ['bgService.js'], {
stdio: [ 'ignore', out, err ], // piping stdout and stderr to out.log
detached: true
}).unref();
有关更多信息,请参见child_process.spawn
文档
前面所讲,都是将工作丢到后台去运行,那么,有没有可以将后台工作拿到前台来执行的办法呢?答案是肯定的,使用 fg 命令即可。 fg 命令用于把后台工作恢复到前台执行,该命令的基本格式如下: [root@localhost ~]#fg %工作号 注意,在使用此命令时,% 可以省略,但若将 全部省略,则此命令会将带有 + 号的工作恢复到前台。另外,使用此命令的过程中, % 可有可无。 例如: [roo
问题内容: 我正在使用Dockerfile创建Docker映像。我想在启动Docker容器时执行一些脚本。目前,我有一个Shell脚本来执行所有必要的过程 CMD [“ sh”,“ start.sh”] 我想用在后台示例中运行的进程执行shell命令 CMD [“ sh”,“-c”,“ mongod –dbpath / test&”] 问题答案: 除了对您的问题的评论已经指出有关Docker最佳实
我正在使用DockerFile创建一个docker图像。我想在启动docker容器的同时执行一些脚本。目前我有一个shell脚本来执行所有必要的进程 CMD[“sh”,“start.sh”]
本文向大家介绍把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?相关面试题,主要包含被问及把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?时的应答技巧和注意事项,需要的朋友参考一下 答案: 把后台任务调到前台执行 fg 把停下的后台任务在后台执行起来 bg
本文向大家介绍在Linux中后台运行命令,包括了在Linux中后台运行命令的使用技巧和注意事项,需要的朋友参考一下 要了解何时使用Linux,一种有用的技术是在后台运行命令。有时某些命令可能要花一些时间(例如复制大文件),或者在运行时仅接管终端窗口。例如,假设您在gedit中打开文件,则可以使用以下命令。 gedit file.txt 这样做将在gedit中打开文件,但在关闭gedit之前不允许您
我有一个CircleCI配置,它的末尾有一个部署脚本。该命令应该SSH到服务器中,移动到目录并执行NPM脚本。看起来是这样的: 这将引发以下错误: 这表示服务器上没有安装NPM,但它安装了。为了测试这一点,如果我单独运行这些命令,它们就可以工作。 那么这里有什么问题?