NetK - FreeBSD 8

FreeBSD 8.3. Не може да бъде унищожен от процес kill -9 Asterisk

Когато няма начин да рестартирате сървъра, проблемът с зависналия процес може да се превърне в главоболие. И Asterisk стана такъв процес.

При спиране на Asterisk 1.8.12.0 се появи грешката „Не може да се свърже с отдалечена звездичка (съществува ли /var/run/asterisk/asterisk.ctl?)“:

В папка /var/run/asterisk:

процеса

При опит за спиране чрез kill -9 резултатът е същият - процесът продължава да се показва в изхода на командата ps:

Състоянието на този процес е Ts, където T означава, че процесът е в състояние STOP. На теория даден процес може да бъде поставен в състояние STOP, като му се изпрати сигнал SIGSTOP. В този случай изпълнението на процеса ще бъде спряно и възобновено след получаване на сигнала SIGCONT. В този случай преходът на процеса към състояние STOP вероятно е причинен от вътрешна грешка в софтуера.

Новият процес на звездичка не работи поради заети сокети. Грешките се появяват в регистрационните файлове със звездичка:

"ГРЕШКА[8466] tcptls.c: Не може да се свърже http сървър към 1.1.1.1:8088: Адресът вече се използва ГРЕШКА[8466] tcptls.c: Не може да се свърже AMI сървър към 1.1.1.1:5038: Адресът вече се използва":

freebsd

Резултатът от командите sockstat и lsof показва сокетите, заети от процеса със звездичка:

freebsd

netk

Процесът има ppid 1, т.е. родителският процес е init:

Командата truss не показва никакви системни повиквания.

Опитите за прекратяване на процеса с други командни сигнали за спиране, включително SIGCONT, също се провалят. Това означава, че в момента даден процес не може да бъде поставен на опашка за изпълнение, тъй като само онези процеси, които отговарят на условията за изпълнение, могат да получават сигнали. Освобождаването прекъснаресурсите, заети от процеса, не могат да се обработват от обикновените инструменти на FreeBSD. В този случай само рестартирането на сървъра помага.

Най-честите причини, поради които е невъзможно да се прекрати процесът, включително SIGKILL:

1. Процесът виси със статус D (флаг D в изхода на командата ps). Това означава, че има хардуерен проблем с диска или контролера (драйвера) или мрежов проблем, ако се използва NFS.

2. Процесът е спрян. Резултатът от командата ps показва състоянието T (sTopped). В този случай можете да опитате да изпратите SIGCONT на процеса (kill -19).

3. Процес със статус Z. Това е дъщерен процес, който завърши изпълнението си, но родителският процес не можа да получи кода си за изход. Такъв процес все още присъства в списъка с процеси на операционната система. Той не използва системни ресурси, не заема памет, но заключва записи в таблицата на процесите, чийто размер е ограничен за всеки потребител и системата като цяло. Такива "мъртви процеси" се наричат ​​зомбита.