2015-03-22 2 views
1

Мне было интересно, можно ли завершить только поток, на котором выполняется приложение узла, но НЕ процесс.Node kill thread, но не процесс

Теперь, я знаю, это звучит странно, потому что узел является однопоточным, НО я работаю над .NET-приложением, в котором находится узел в процессе. И когда я заканчиваю узел с process.exit(), все приложение закрывается, что я не хочу делать. Я просто хочу, чтобы поток узла был завершен.

Честно говоря, я так отчаянно, что даже пытался, получив список всех приложений, до создания потока, на котором выполняется узел, а затем другого списка после его создания, а затем удалив все потоки, которые были представлены до начала узел, сохраняя ссылку на оставшийся поток, считая, что это поток узлов. Как вы могли ожидать, это не получилось так хорошо.

Я использую EdgeJS для размещения узла, если это имеет значение. К сожалению, у него нет встроенной функциональности, чтобы закончить себя.

Oh и server.close() не работает для меня, почему-то.

У меня есть сервер потокового видео в моем коде узла, если эта информация может помочь вам каким-либо образом.

Спасибо за помощь!

+0

Причина, по которой вы «трюк» не работает, заключается в том, что похоже, что вы запускаете свой node.js в процессе. То есть, не в нитке. Поэтому существует ровно нулевая нить, которая работает с узлом node.js, помимо вашего приложения .NET. – slebetman

+0

Библиотека EdgeJS (это в .NET) создает отдельный поток, чтобы запустить внутри него код узла. – matteeyah

+0

Вы уверены? Я быстро взглянул на документы и не видел нигде. – slebetman

ответ

3

Нулевой поток должен взаимодействовать, очищая все, что работает в цикле событий, и затем оно естественным образом завершается путем возврата. Поэтому просто перестаньте слушать запросы, закрыть дескрипторы и т. Д. Вы можете использовать process._getActiveRequests и process._getActiveHandles, чтобы увидеть, что поддерживает цикл событий.

Вы также можете внезапно прервать поток узлов, вызвав OS apis, но это приведет к утечке большого количества мусора, пока вы не выйдете из процесса, чтобы вы не могли запустить/перезапустить узел много раз, прежде чем вам нужно будет выйти из процесса в любом случае освободите просочившиеся ресурсы.

+0

Я попытался закрыть поток через OS API, но не могу точно определить/ссылаться на поток. Любая документация по 'process._getActiveRequests()' и 'process._getActiveHandles()', поскольку они, похоже, не находятся в официальной документации api? – matteeyah