返回Node.js子进程的pid的最简单方法

时间:2018-11-27 07:05:00

标签: javascript node.js

我的脚本旨在从此nodejs脚本启动python程序。 (Nodejs不是我的语言)。 我想确定启动后的python脚本的pid,然后在需要时随时将其杀死。这是我的代码。

var pid = {};

v1.on('write', function(param) {
    if (param[0] == '1') {
            child = exec('python /home/pi/startup/motion.py',
            function (error, stdout, stderr) {
                console.log('stdout: ' + stdout);
                console.log('stderr: ' + stderr);
                if (error !== null) {
                     console.log('exec error: ' + error);
                }
            });
        writeVal = 'motion sensor ON'; 
    }
    else if (param[0] == '0') {
        child = exec('kill'+ pid,
            function (error, stdout, stderr) {
                console.log('stdout: ' + stdout);
                console.log('stderr: ' + stderr);
                if (error !== null) {
                    console.log('exec error: ' + error);
                }
            });
        writeVal = 'Motion OFF';
    }
});

2 个答案:

答案 0 :(得分:1)

exec返回一个ChildProcess对象,因此您可以使用persistence.xml获取该pid。

您也可以不使用shell命令直接使用child.pid

child.kill()

答案 1 :(得分:0)

我看到您已经创建了一个用于运行python的脚本。我假设您有PID。如果没有,运行Python脚本后,child变量应为您提供child.pid

的PID

将其保存在pid变量中。您可以使用以下命令来终止任务。

-f是为了确保“强行杀死”

注意:/ PID后面的空格是强制性的,以免出现参数错误

childProcess.exec('taskkill -f /PID ' + pid, function(err, stdout, stderr){
     var status = stdout.split(':')[0]
     if(status === 'SUCCESS'){ 
         //successfully killed
     } else if(status === 'ERROR'){
         //Ouch! PID does not exist
     }
     //Note: You get stdout for both the scenarios where PID is found and PID is not found                           
})