Есть ли способ убить зомби-процесс без перезагрузки? Вот как это произошло:
Я хочу скачать файл 12 ГБ, используя торрент. После добавления файла .torrent передача превратилась в процесс зомби (я тоже пробовал ktorrent. Такое же поведение). Наконец, я мог загрузить файл с помощью µTorrent, но после закрытия программы он тоже превратился в зомби.
Я пытался использовать kill
, skill
и pkill
с разными опциями и -9
сигналом, но безуспешно.
Прочитав некоторые решения в Интернете, я обнаружил, что убийство родителей может убить зомби. Но убийство вина тоже не помогло.
Есть ли другой способ?
Редактировать:
ps -o pid, ppid, stat, comm
PID PPID STAT COMMAND
7121 2692 Ss bash
7317 7121 R+ ps
выход pstree:
init─┬─GoogleTalkPlugi───4*[{GoogleTalkPlug}]
├─NetworkManager─┬─dhclient
│ └─{NetworkManager}
├─acpid
├─amarok───19*[{amarok}]
├─apache2───5*[apache2]
├─atd
├─avahi-daemon───avahi-daemon
├─bonobo-activati───{bonobo-activat}
├─clock-applet
├─console-kit-dae───63*[{console-kit-da}]
├─cron
├─cupsd
├─2*[dbus-daemon]
├─2*[dbus-launch]
├─desktopcouch-se───desktopcouch-se
├─firefox───run-mozilla.sh───firefox-bin─┬─plugin-containe───8*[{plugin-contain}]
│ └─14*[{firefox-bin}]
├─gconfd-2
├─gdm-binary─┬─gdm-simple-slav─┬─Xorg
│ │ ├─gdm-session-wor─┬─gnome-session─┬─bluetooth-apple
│ │ │ │ ├─compiz───sh───gtk-window-deco
│ │ │ │ ├─fusion-icon
│ │ │ │ ├─gdu-notificatio
│ │ │ │ ├─gnome-panel───{gnome-panel}
│ │ │ │ ├─gnome-power-man
│ │ │ │ ├─gpg-agent
│ │ │ │ ├─gwibber-service
│ │ │ │ ├─nautilus
│ │ │ │ ├─nm-applet
│ │ │ │ ├─polkit-gnome-au
│ │ │ │ ├─2*[python]
│ │ │ │ ├─qstardict───{qstardict}
│ │ │ │ ├─ssh-agent
│ │ │ │ ├─tracker-applet
│ │ │ │ ├─trackerd
│ │ │ │ ├─wakoopa─┬─wakoopa
│ │ │ │ │ └─3*[{wakoopa}]
│ │ │ │ └─{gnome-session}
│ │ │ └─{gdm-session-wo}
│ │ └─{gdm-simple-sla}
│ └─{gdm-binary}
├─6*[getty]
├─gnome-keyring-d───2*[{gnome-keyring-}]
├─gnome-screensav
├─gnome-settings-
├─gnome-system-mo
├─gnome-terminal─┬─bash───ssh
│ ├─bash───pstree
│ ├─gnome-pty-helpe
│ └─{gnome-terminal}
├─gvfs-afc-volume───{gvfs-afc-volum}
├─gvfs-fuse-daemo───3*[{gvfs-fuse-daem}]
├─gvfs-gdu-volume
├─gvfsd
├─gvfsd-burn
├─gvfsd-computer
├─gvfsd-metadata
├─gvfsd-trash
├─hald─┬─hald-runner─┬─hald-addon-acpi
│ │ ├─hald-addon-cpuf
│ │ ├─hald-addon-inpu
│ │ └─hald-addon-stor
│ └─{hald}
├─indicator-apple
├─indicator-me-se
├─indicator-sessi
├─irqbalance
├─kded4
├─kdeinit4─┬─kio_http_cache_
│ └─klauncher
├─kglobalaccel
├─modem-manager
├─multiload-apple
├─mysqld───10*[{mysqld}]
├─named───10*[{named}]
├─nmbd
├─notification-ar
├─notify-osd
├─polkitd
├─pulseaudio─┬─gconf-helper
│ └─2*[{pulseaudio}]
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smbd───smbd
├─snmpd
├─sshd
├─timidity
├─trashapplet
├─udevd───2*[udevd]
├─udisks-daemon─┬─udisks-daemon
│ └─{udisks-daemon}
├─upowerd
├─upstart-udev-br
├─utorrent.exe───{utorrent.exe}
├─vnstatd
├─winbindd───2*[winbindd]
├─wnck-applet
├─wpa_supplicant
└─xinetd
Системный монитор и верхняя часть показывают, что процесс зомби использует ресурсы:
Редактировать 2: я думаю, что нашел что-то. Я попытался выйти из системы и увидел это сообщение:
Так как другие торрент-клиенты имеют ту же проблему, возможно, это связано с размером файла. Я использую Ubuntu 10.04 на разделах ext4. Уничтожение nautilus и отправка ему сигнала SIGCHLD не сработало.
ps -o pid,ppid,stat,comm
иpstree
на ваш вопрос?Ответы:
Я не думаю, что процесс зомби - большая головная боль. Процесс зомби не требует никаких ресурсов. Просто у него есть запись в таблице процессов.
Процесс Zombie - это не процесс-сирота, у него есть родитель.
kill
,skill
pkill
не будет работать, так как процесс уже убит, просто его запись не была удалена.Зомби-процесс можно убить, отправив
SIGCHLD
сигнал родителю. Я думаю, что номер сигналаSIGCHLD
является17
или18
Если это также не помогает, вы можете убить самого родителя.
Из Википедии по сигналу SIGCHLD:
РЕДАКТИРОВАТЬ 1 : Системные ресурсы потребляются в основном записи таблицы процесса. Если кто-то знает, потребляет ли он больше - память или процессорный цикл, пожалуйста, добавьте объяснение. AFAIK вряд ли потребует каких-либо значительных системных ресурсов.
РЕДАКТИРОВАТЬ 2: Цитата из Википедии
Таким образом, запись сохраняется, чтобы родительский процесс мог знать состояние выхода, потому что в момент выхода дочернего элемента родитель, вероятно, не находится в состоянии или не готов прочитать свое состояние выхода.
РЕДАКТИРОВАТЬ 3
До сегодняшнего дня я никогда не испытывал зомби-процесса, который занимал 100% процессорного времени. Видя это в первый раз.
Попробуйте сделать
killall utorrent.exe
Я вижу, что есть два экземпляра,
utorrent.exe
и один из них зомби. Вероятно, второй (ребенок). killall должен убить родителя, так как ребенок (зомби) не может быть убит.РЕДАКТИРОВАТЬ 4
Похоже, killall не работал, так как он давал сигнал TERM вместо KILL.
Проверять
killall --signal=KILL utorrent.exe
Если это не работает, попробуйте убить процесс выборочно.
Получить список utorrent.exe процесса PID
Вы должны получить два процесса, как
Таким образом, второй родитель. Убей его, используя
РЕДАКТИРОВАТЬ 5
Пожалуйста, попробуйте найти Parent Id процесса с помощью этой команды bash
в вашем случае это
Если вывод приходит как
Тогда, к сожалению, я думаю, что вам не повезло. Идентификатор процесса
1
принадлежит init, без которого ваша система не может работатьисточник
A zombie process does not take up any resources
и процитировалиthe child is still consuming system resources ... it is known as a zombie process
.top -H
для отображения темы вместо процессов в верхней.Использование
kill
самого процесса действительно неэффективно, так как процесс уже мертв;kill
приносит живой процесс в состояние зомби.Родительский процесс отвечает за выбор кода завершения процесса; процесс остается зомби, пока это не будет сделано.
init
Процесс будет забрать код завершения любого процесса и выбросить его, так что это «последней инстанции» родитель , который будет очищать любые зомби , который является прямым потомком.Уничтожение родителя процесса зомби, как правило, эффективно, потому что процесс зомби затем возвращается в
init
качестве своего родителя, как только родительский процесс завершается (то есть, убийство родителя превратило этот процесс в зомби, а дедушка прочитал код выхода родителя так что родитель действительно ушел). Зомби может быть родителем зомби, поэтому простого убийства родителя недостаточно, его также необходимо собрать другим процессом.Обратите внимание, что процессы никогда не отвечают за очистку своих внуков - они всегда возвращаются к процессу 1 в качестве родительского (именно поэтому авторы демонов иногда используют двойную ветвь () и завершают процесс в середине, чтобы полностью отделить дочерний процесс от вызывающего ракушка)
Причина, по которой убийство,
wine
вероятно, неэффективно, заключается в том, что на самом деле он не был родителем процесса зомби; скорее, "utorrent.exe", который является прямым потомком init. Этот процесс, однако, все еще работает нормально, просто пренебрегая своими обязанностями.источник
ps waux
указан вPPID
столбце для зомби.Намного проще, чем killall, -9 и т. Д.
1) Используйте qBitorrent вместо консоли uTorrent (я тоже жду версию с графическим интерфейсом, и qBitorrent по сути это).
2) Если вы используете 11.04 или выше, нажмите alt + f2 (откроется специальное окно команд), введите xkill, и ваша мышь теперь будет х. Нажмите на программу, которую вы хотите закрыть (UI = ID процесса), и она убьет ее для вас.
Расширенный совет: свяжите сочетание клавиш для «xkill», как у меня на макроклавиатуре G15.
источник
В моем случае, когда вино висит, и я не могу убить ребенка-зомби из дробовика, я бы сделал:
wineserver -k
тогда я убил бы "Сына Процесса"killall -9 Oblivion.exe
(например)Насколько я понимаю, винсервер посылает сигнал всем своим детям-зомби, что они все умрут (из-за дробовика, вы знаете), но иногда ребенок думает сам по себе и хочет взять мир штурмом. Так что я делаю дополнительный
killall -9
илиkill -9
с идентификатором процесса.источник
kill -s SIGCHLD ppid
Я предполагаю, что вы используете SSD.
При добавлении больших торрентов в торрент-клиент загружаемые файлы торрента фактически создаются на диске, но они пусты до тех пор, пока не будут постепенно заполнены в процессе загрузки.
При обычном жестком диске этот диск является узким местом, и вы не заметите проблем с производительностью остального рабочего стола.
Однако при использовании твердотельного накопителя узким местом является центральный процессор, и приложение, по-видимому, зависло (становится серым). Если вы оставите его на некоторое время, оно восстановится, и все будет хорошо. Это был мой опыт с момента перехода на SSD.
Что касается процессов уничтожения, другие предоставили лучший совет, чем я - использование сигнала KILL обычно работает, но у меня был странный сигнал, который требовал перезапуска в течение многих лет.
источник