Я пытаюсь выполнить кучу команд bash с помощью node.js. Я использовал child_process.exec для выполнения команд.
var child_process = require('child_process');
child_process.exec("ps -p $(lsof -ti tcp:8088) o pid=,comm=",function(err,stdout, stderr){
if(err){
console.log('error',err);
return;
}
console.log('stdout', stdout);
});
При этом будет указан идентификатор процесса, который будет работать в порту 8088 вместе с именем. Аналогично, когда я пытаюсь выполнить команду top с идентификатором процесса, чтобы проверить использование процессора и памяти. Я столкнулся с ошибкой.
var execTop = function(pid){
child_process.exec("top -p 12769", function(err, stdout, stderr){
if(err){
console.log('error',err);
return;
}
console.log("top output",stdout);
})
}
Я не мог найти много ресурсов в Интернете, чтобы прояснить эту проблему. Фактическая ошибка
error { [Error: Command failed: /bin/sh -c top -p 12769
top: failed tty get
]
killed: false,
code: 1,
signal: null,
cmd: '/bin/sh -c top -p 12769' }
Я ценю возможные решения. Заранее спасибо.
Если вы действительно хотите запустить top
как это, вам нужно запустить в нем "Пакетный режим", например:
top -b -n 1 -p 12345
Это связано с тем, что top
обычно предназначена для интерактивной команды и хочет иметь фактический терминал для записи. Возможно, вы захотите использовать что-то вроде ps u -p 12345
для более сжатого вывода.
как предложил Гриша, использовать "Пакетный режим", и если требуется только процессор и память, для основного вывода по умолчанию я бы использовал что-то вроде:
top -b -n 1 -p 12345 | awk '{if(NR>7)print $9,$10}'