node.js如何通过进程名称检查进程是否正在运行?
我在linux中运行node.js,从node.js如何从进程名检查进程是否正在运行? 最坏的情况是我使用child_过程,但不知道是否有更好的方法node.js如何通过进程名称检查进程是否正在运行?,node.js,Node.js,我在linux中运行node.js,从node.js如何从进程名检查进程是否正在运行? 最坏的情况是我使用child_过程,但不知道是否有更好的方法 谢谢 您可以使用ps节点包 我相信你会看到这个例子。看看这个网站,他们还有很多其他用途。试试看 如果您没有绑定到nodejs,那么在linux命令行中,您还可以执行ps-ef | grep“您的_进程_名称_,例如_nodejs”,以检查是否有正在运行的进程。以下操作应该有效。将根据操作系统生成一个进程列表,并对所需程序的输出进行解析。该函数有三
谢谢 您可以使用ps节点包 我相信你会看到这个例子。看看这个网站,他们还有很多其他用途。试试看
如果您没有绑定到nodejs,那么在linux命令行中,您还可以执行
ps-ef | grep“您的_进程_名称_,例如_nodejs”
,以检查是否有正在运行的进程。以下操作应该有效。将根据操作系统生成一个进程列表,并对所需程序的输出进行解析。该函数有三个参数,每个参数都只是相应操作系统上的预期进程名
根据我的经验,ps节点需要太多的内存和时间来搜索进程。如果您计划经常检查流程,此解决方案会更好
const exec=require('child_process')。exec
功能正在运行(win、mac、linux){
返回新承诺(功能(解决、拒绝){
const plat=process.platform
const cmd=plat=='win32'?'tasklist':(plat=='darwin'?'ps-ax | grep'+mac:(plat=='linux'?'ps-A':'')
const proc=plat=='win32'?win:(plat=='darwin'?mac:(plat=='linux'?linux:“”))
如果(cmd==''| | proc==''){
解析(false)
}
exec(命令,函数(错误,标准输出,标准输出){
解析(stdout.toLowerCase().indexOf(proc.toLowerCase())>-1)
})
})
}
正在运行('myprocess.exe'、'myprocess'、'myprocess'、'myprocess')。然后((v)=>console.log(v))
对由d\u scalzi回答的代码进行了一些改进。函数使用回调而不是承诺,只使用一个变量查询,使用开关而不是if/else
const exec = require('child_process').exec;
const isRunning = (query, cb) => {
let platform = process.platform;
let cmd = '';
switch (platform) {
case 'win32' : cmd = `tasklist`; break;
case 'darwin' : cmd = `ps -ax | grep ${query}`; break;
case 'linux' : cmd = `ps -A`; break;
default: break;
}
exec(cmd, (err, stdout, stderr) => {
cb(stdout.toLowerCase().indexOf(query.toLowerCase()) > -1);
});
}
isRunning('chrome.exe', (status) => {
console.log(status); // true|false
})
@musaddin解决方案的另一个改进是使用自调用switch语句,而不是重新分配
let
/**
*
* @param {string} processName The executable name to check
* @param {function} cb The callback function
* @returns {boolean} True: Process running, else false
*/
isProcessRunning(processName, cb){
const cmd = (()=>{
switch (process.platform) {
case 'win32' : return `tasklist`;
case 'darwin' : return `ps -ax | grep ${processName}`;
case 'linux' : return `ps -A`;
default: return false;
}
})();
require('child_process').exec(cmd, (err, stdout, stderr) => {
cb(stdout.toLowerCase().indexOf(processName.toLowerCase()) > -1);
});
}
cmd
将被分配switch语句的结果,并生成更易于阅读的代码(特别是当涉及更复杂的代码时,自调用switch语句意味着您只创建所需的变量,而不需要在心里跟踪它们的值).以下是其他答案的另一个版本,带有打字脚本和承诺:
export async function isProcessRunning(processName: string): Promise<boolean> {
const cmd = (() => {
switch (process.platform) {
case 'win32': return `tasklist`
case 'darwin': return `ps -ax | grep ${processName}`
case 'linux': return `ps -A`
default: return false
}
})()
return new Promise((resolve, reject) => {
require('child_process').exec(cmd, (err: Error, stdout: string, stderr: string) => {
if (err) reject(err)
resolve(stdout.toLowerCase().indexOf(processName.toLowerCase()) > -1)
})
})
}
对于相关主题,以下是一些最好的软件包: 按pid、名称模式和不同方式包进行搜索:
- (我发现对我的需求很有兴趣的一个)
const processesList = await findProcess(
'name',
/.*?\/kidoAgent\/Broker\/process.js.*/ // regex pattern
);
console.log({ processesList });
if (processesList.length === 0) {
/**
* No process
* (create it)
*/
// ......
}
它以数组形式返回找到的进程列表
运行时,对于console.log({processesList})代码>它显示:
{
processesList: [
{
pid: 7415,
ppid: 2451,
uid: 1000,
gid: 1000,
name: 'node',
bin: '/opt/node-v12.4.0-linux-x64/bin/node',
cmd: '/opt/node-v12.4.0-linux-x64/bin/node ' +
'/home/coderhero/Dev/.../build/.../kidoAgent/Broker/process.js'
}
]
}
检查模块中的所有选项和方法 这将如何在windws上工作。我想这会给你带来错误windows@Shyam如ps节点上公布的
home。它“应该”在windows上工作。如果没有,那么可能值得一个github问题。注意:此模块需要安装其他软件。这可能不适用于没有安装正确工具的系统或容器。这在所有平台上都能发挥神奇的作用。谢谢被否决。这个函数在mac上总是返回true,因为会有进程'px-ax | grep{query}'在这里运行是最好的模块,因为它不需要安装外部程序来工作
const processesList = await findProcess(
'name',
/.*?\/kidoAgent\/Broker\/process.js.*/ // regex pattern
);
console.log({ processesList });
if (processesList.length === 0) {
/**
* No process
* (create it)
*/
// ......
}
{
processesList: [
{
pid: 7415,
ppid: 2451,
uid: 1000,
gid: 1000,
name: 'node',
bin: '/opt/node-v12.4.0-linux-x64/bin/node',
cmd: '/opt/node-v12.4.0-linux-x64/bin/node ' +
'/home/coderhero/Dev/.../build/.../kidoAgent/Broker/process.js'
}
]
}