Python-скрипты (curses + pysqlite) зависают после того, как родительская оболочка исчезает - PullRequest
0 голосов
/ 06 июля 2010

Я написал скрипт на python, который делает некоторые проклятия и pysqlite, но я заметил, что в тех случаях, когда я запускал этот скрипт через ssh, когда этот сеанс ssh был убит по любой причине, по которой скрипт python не делает ' на самом деле он выходит, вместо этого он становится потомком init и остается там навсегда. Я не могу убить -9 их или что-нибудь. Они также увеличивают зарегистрированную загрузку системы на 1. В настоящее время у меня есть 8 из этих, в основном, мертвых процессов, и сервер имеет среднюю загрузку 8.abit. Я полагаю, это потому, что есть какой-то ресурс, которого ждут эти сценарии, но lsof фактически ничего не открывает им, все файлы данных, которые они использовали, перечислены как удаленные и т. Д., И они вообще не используют время процессора .

Я выполняю некоторую проверку сигналов в сценарии, обращаюсь к некоторым подпрограммам обновления на HUP, но ничего больше, не разветвления или что-то еще, и я в растерянности относительно того, почему сценарии не просто отключаются когда я закрываю сеанс SSH.

Спасибо, Крис

1 Ответ

1 голос
/ 06 июля 2010

Ну, причина, по которой они не закрываются, когда ваш ssh-сеанс завершается, в том, что HUP - это сигнал, используемый родителем для информирования своих потомков, что они должны завершить работу.Если вы переопределяете поведение этого сигнала, то ваши процессы не будут автоматически закрываться при закрытии сеанса SSH.Что касается того, почему вы не можете убить их, однако, я в растерянности.Единственное, что я видел, что вызывает такое поведение, - это процессы, заблокированные в неправильно работающих файловых системах (с nfs & unionfs я столкнулся с проблемой).

...