Там какой-либо путь состоит в том, чтобы уничтожить процесс-зомби без перезагрузки?

Там какой-либо путь состоит в том, чтобы уничтожить процесс-зомби без перезагрузки? Вот то, как это произошло:

Я хочу загрузить файл на 12 ГБ с помощью потока. После добавления .torrent файла передача превратилась в процесс-зомби (я попробовал ktorrent также. То же поведение). Наконец я мог загрузить файл с помощью µTorrent, но после закрытия программы, он превращается в зомби также.

Я пытался использовать kill, skill и pkill с различными вариантами и -9 предупредите, но никакой успех.

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

Есть ли иначе?

Править:

PS-o pid, ppid, статистика, коммуникация

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

Системный монитор и вершина показывают, что процесс-зомби использует ресурсы:

enter image description here

enter image description here

Редактирование 2: Я думаю, что нашел что-то. Я пытался выйти из системы и видел это сообщение:

enter image description here

Так как у других клиентов потока есть th та же проблема, возможно, это - что-то о размере файла. Я использую человечность 10.04 на ext4 разделах. Уничтожение наутилуса и отправка SIGCHLD сигнализируют к нему, не работал.

50
задан 26 May 2014 в 12:53

5 ответов

Я не думаю, что зомби-процесс - это большая головная боль. Зомби-процесс не занимает никаких ресурсов. Просто у него есть запись в таблице процессов.

Зомби-процесс не сиротский процесс, у него есть родитель.

kill, skill pkill не сработает, так как процесс уже убит, просто запись не была удалена.

зомби-процесс может быть убит, отправив сигнал SIGCHLD родителю. Я думаю, что сигнал SIGCHLD - это 17 или 18

Если это также не удастся, то вы, возможно, захотите убить самого родителя.

Из Википедии на сигнале SIGCHLD:

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


EDIT 1: Системные ресурсы, потребляемые системой, в основном представляют собой ввод таблицы процессов. Если кто-то знает, потребляет ли она больше - память или процессорный цикл, то, пожалуйста, добавьте пояснение. AFAIK едва ли занимает какие-либо значительные системные ресурсы.


EDIT 2: Цитата из Википедии

На Unix и Unix-подобном компьютере операционные системы, зомбированный процесс или несуществующий процесс - это процесс, в котором завершённое исполнение, но всё ещё имеющее запись в таблице процессов. Эта запись по-прежнему необходимо, чтобы процесс которая запустила процесс (теперь уже зомби) чтобы прочитать статус выхода.

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


EDIT 3

До этой даты я никогда не сталкивался с зомби-процессом, занимающим 100% процессора. Впервые вижу это.

Попробуйте сделать killall utorrent.exe

Я вижу, что есть два экземпляра utorrent.exe и один из них - зомби. Вероятно, второй (ребенок). killall должен убить родителя, так как ребенок (зомби) не может быть убит.


EDIT 4

Похоже, что убийство не сработало, так как давало сигнал TERM вместо KILL.

Попробуйте killall --signal=KILL utorrent. exe

Если это не сработает, то попробуйте убить процесс селективно.

Получите список PID процесса utorrent.exe

ps -e | grep -i utorrent

Вы должны получить два процесса типа

xxxx ?        aa:bb:cc utorrent.exe defunct
yyyy ?        aa:bb:cc utorrent.exe

Таким образом, второй процесс является родительским. Убейте его, используя

kill -9 yyyy

EDIT 5

Пожалуйста, попробуйте найти родительский идентификатор процесса этой командой bash

cat /proc/{defunctpid}/status | grep -i ppid

в вашем случае это

cat /proc/7298/status | grep -i ppid

Если на выходе получается как

PPid: 1

Тогда, к сожалению, я думаю, что вам не повезло. Process Id 1 принадлежит init, без которого ваша система не может работать

43
ответ дан 26 May 2014 в 12:53

Гораздо проще, чем killall, -9 и т.д.:

1)Используйте qBitorrent вместо консольного uTorrent (я тоже жду GUI версию и qBitorrent по сути это он).

2)Если вы используете 11. 04 или выше, нажмите alt+f2 (откроется специальное окно команд), введите xkill и ваша мышь станет x. Щелкните по программе, которую хотите закрыть (UI = process ID) и она убьет ее за вас.

Расширенный совет: свяжите сочетание клавиш для "xkill", как у меня на макроклавиатуре G15.

3
ответ дан 26 May 2014 в 12:53

Использование kill на самом процессе действительно неэффективно, так как процесс уже мертв; kill доводит живой процесс до состояния зомби.

Родительский процесс отвечает за получение кода выхода из процесса; процесс остается зомби до тех пор, пока это не будет сделано. Процесс init подхватывает код выхода любого процесса и выбрасывает его, поэтому именно родительский процесс "lastt-resort" убирает любого зомби, являющегося прямым потомком.

Убийство родителя зомби-процесса обычно эффективно, потому что зомби-процесс затем возвращается к init, как только родительский процесс уходит (т.е. убийство родителя превратило этот процесс в зомби, а бабушка-дедушка прочитал код выхода родителя, так что родитель на самом деле уходит). Зомби может быть родителем зомби, поэтому просто убить родителя недостаточно, его также должен собрать другой процесс.

Обратите внимание, что процессы никогда не отвечают за очистку своих внуков - они всегда возвращаются к процессу 1 в качестве родительского (именно поэтому авторы демона иногда используют двойную вилку() и завершают процесс в середине, чтобы полностью отделить дочерний процесс от вызывающей оболочки)

Причина, по которой убийство wine, вероятно, неэффективно, заключается в том, что на самом деле он не был родителем зомби-процесса; скорее, "utorrent.exe", являющийся прямым потомком init, является таковым. Этот процесс, однако, все еще работает нормально, просто пренебрегая своими обязанностями.

10
ответ дан 26 May 2014 в 12:53

Я думаю, что вы используете SSD.

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

При использовании обычного жесткого диска, диск является узким местом, и вы не заметите проблем с производительностью на остальном рабочем столе.

При использовании SSD, однако, процессор является узким местом, и приложение, кажется, разбился (становится серым). Если вы оставите его на некоторое время, он восстановится, и все будет хорошо. Это было моим опытом с момента перехода на SSD.

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

-4
ответ дан 26 May 2014 в 12:53

В моем случае, когда вино висит и я не могу убить ребенка зомби дробовиком, я бы сделал:

виночерпий -k, тогда я бы убил "Сына процесса" убил бы -9 Oblivion.exe (Например).

Как я понимаю, винодел посылает сигнал всем своим зомби-чайлдам, что они все умрут (из-за дробовика, который вы знаете), но иногда ребенок думает сам по себе и хочет взять мир штурмом. Поэтому я делаю дополнительное убийство -9 или убийство -9 с id процесса.

1
ответ дан 26 May 2014 в 12:53

Другие вопросы по тегам:

Похожие вопросы: