Как убить открытый процесс на node.js?

Я пытаюсь настроить систему сборки для Node.js на возвышенном, поэтому я могу нажать F7, чтобы вызвать «узел» в открытом файле. Проблема в том, что процесс затем открыт навсегда, поэтому при втором использовании F7 я получаю надстройку.

Есть ли способ убить открытый процесс «node.exe» из node.js?


person MaiaVictor    schedule 30.06.2012    source источник
comment
Возможный дубликат остановить все экземпляры сервера node.js   -  person rofrol    schedule 28.11.2015


Ответы (5)


Используйте следующий набор команд, чтобы определить процесс, работающий на данном порту, и завершить его из командной строки.

   sudo fuser -v 5000/tcp // gives you the process running on port 5000

Он выведет детали, подобные показанным ниже.

                        USER        PID ACCESS COMMAND
   5000/tcp:            almypal     20834 F.... node

Затем используйте

   sudo fuser -vk 5000/tcp

для прекращения процесса. Проверьте еще раз, используя

   sudo fuser -v 5000/tcp

чтобы убедиться, что процесс завершен.

В Windows вы можете использовать следующие шаги

  C:\> tasklist // will show the list of running process'

  Image Name        PID Session Name    Session#    Mem Usage
  System            4   console                 0   236 K
  ...
  node.exe         3592 console                0    8440 k

Обратите внимание на PID, соответствующий процессу вашего узла, в данном случае 3592. Затем запустите taskkill, чтобы завершить процесс.

  C:\> taskkill /F /PID 3592

Или переключатель /IM

  C:\> taskkill /F /IM node.exe
person almypal    schedule 30.06.2012
comment
Отличный ответ, но... а для Windows? - person MaiaVictor; 30.06.2012
comment
Ну, только что заметил, что это не совсем то, о чем я просил, но команды можно использовать из node.js, и если вы немного их измените (с идентификатора процесса на имя процесса), он сделает то, что я просил, так что это лучший ответ, который я получил. - person MaiaVictor; 04.07.2012
comment
Спасибо! Это единственная команда, которая работает в IDE cloud9 для уничтожения процесса node.js. - person Jone Polvora; 22.02.2013
comment
для окон это намного проще, просто откройте диспетчер задач и отсортируйте по имени и процессу end task node.js - person Exlord; 12.06.2019
comment
Taskkill в Windows требует прав администратора для запуска. Как мы можем сделать это в скрипте npm?? - person shishir; 15.07.2021

Изнутри Node.js:

var die = function(quitMsg)
{
    console.error(quitMsg)
    process.exit(1);
} 

die('Process quit');

Существуют определенные методы для выхода, доступные только для POSIX (т.е. не для Windows), которые выйдет из процесса по его идентификатору процесса.

Кроме того, обратите внимание, что вы можете отправить сигнал kill(), используя этот метод, который не говорит, что он недоступен для Windows:

process.kill(pid, [signal])
person Alex W    schedule 30.06.2012
comment
Но как мне узнать pid другого работающего node.exe? - person MaiaVictor; 30.06.2012
comment
@Dokkat console.log('This process is pid ' + process.pid); напечатает pid из другого Node.exe, затем вы выполните новый с аргументом командной строки pid этого процесса, а в новом скрипте вы отправляете SIGTERM на pid, который у вас есть в argv. Вся информация доступна по ссылке выше. - person Alex W; 30.06.2012
comment
@Viclib, если вам все еще интересно, я действительно столкнулся с этой конкретной проблемой, и мне нужно было использовать process.kill(pid, [signal]). Я могу дать больше информации, если хотите. - person daniel.caspers; 22.03.2016
comment
@BlazeBiker, к счастью, мне действительно удалось убить процесс за эти 4 года. Тем не менее, я уверен, что некоторые будущие читатели будут рады узнать ваши выводы в качестве ответа на этот вопрос! - person MaiaVictor; 22.03.2016
comment
Просто чтобы добавить дополнительные подробности, я также разместил свои выводы ниже в ответе: stackoverflow.com/a/36179604/2831961 - person daniel.caspers; 23.03.2016

Если вы хотите убить все процессы, чем:

sudo killall -9 node

Если вы хотите убить процесс на выбранном порту, чем:

sudo kill sudo lsof -t -i:3100 

Это был порт 3100

person Renish Gotecha    schedule 03.04.2019

Если возвышенное вы говорите, это плагин sublimeText, у меня такая же проблема, и я отправляю TCP-серверу сообщение «закрытие» из кода Python, затем

app.js

 TCPserver
        .on('connection', function(socket)
        {
            socket.pipe(require('through')
                (function(data)
                { //----------------------------
                    if (data.toString() === 'shutdown')
                    {
                        process.exit();
                    }
                    //--------------------------
                }));
            socket.end();
        })
person Community    schedule 08.08.2013

Аналогично тому, что сказал @Alex W, вы можете отправить сигнал уничтожения процессу, если у вас есть его идентификатор процесса или PID, используя следующую функцию узла:

process.kill(pid, [signal])

В моем случае у меня были легко доступные PID, когда я создавал child_process().spawn.pid. Я протестировал его, и он работает на Win 7 x64.

person daniel.caspers    schedule 23.03.2016