Как устранить ошибку при выполнении команды top с помощью узла child_process.exec?

1

Я пытаюсь выполнить кучу команд 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' }

Я ценю возможные решения. Заранее спасибо.

Теги:
child-process

2 ответа

3
Лучший ответ

Если вы действительно хотите запустить top как это, вам нужно запустить в нем "Пакетный режим", например:

top -b -n 1 -p 12345

Это связано с тем, что top обычно предназначена для интерактивной команды и хочет иметь фактический терминал для записи. Возможно, вы захотите использовать что-то вроде ps u -p 12345 для более сжатого вывода.

  • 0
    Эта верхняя команда в пакетном режиме работает отлично. И возможно ли перечислить только столбцы% Cpu &% Mem и отбросить остальные столбцы с помощью этой команды?
3

как предложил Гриша, использовать "Пакетный режим", и если требуется только процессор и память, для основного вывода по умолчанию я бы использовал что-то вроде:

top -b -n 1 -p 12345 | awk '{if(NR>7)print $9,$10}'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню