Re: Co s neKILLnutelnym procesem?

d.petr d.petr na post.cz
Středa Listopad 30 10:07:15 CET 2011


> ------------ Původní zpráva ------------
> Od: Dalibor Straka <dast na panelnet.cz>
> ----------------------------------------
> >> Jsou ukončena obě RT-vlákna. Zůstane však původní hlavní vlákno programu
> >> (sleduji programem 'top -H'; PID patří původnímu hlavnímu vláknu, další
> hodnoty
> >> jsou PR=20, NI=0, VIRT=RES=SHR=0, S="S", %CPU=%MEM=0). Toto vlákno tedy
> zřejmě
> >> neběží, uvolní veškerou paměť, bohužel ale ne např. obsazený port UDP
> (hlavní
> >> vlákno při spuštění otevřelo serverovou stranu komunikace UDP).
> >> A tento pozůstatek programu nejde KILLnout ani v 'top', ani příkazem
> killall,
> >> ani 'kill PID', ani použitím 'kill -9 PID' (všechny pokusy o zničení
> spouštím
> >> jako root, program byl také spuštěn rootem). Odstranit ho umím pouze
> restartem
> >> celého stroje.
> 
> 
> Zdravim,
> 
> obecne plati(lo), ze kdyz proces preda rizeni kernelu, tak nelze zabit 
> nicim, protoze program provedl nejakou posloupnost volani
> f_program() -> glibc() -> kernel()
> A tam zustane na necem viset. Ve stavu sleeping se muze jednat o cekani 
> na odemceni zamku apod.
> 
> Zajimave by bylo poslat relevantni cast vypisu strace na beh programu. 
> Ve vasem pripade asi poslednich par radku pred smrti.
> 
> -- 
> Dalibor Straka

Já z nich tedy moc nevidím, ale posílám.
To to je výpis pro hlavní vlákno:
    //// tento blok se v pomalých intervalech stále opakuje
nanosleep({10, 0}, {10, 0})             = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
    //// a na konci je
nanosleep({10, 0}, {10, 0})             = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({10, 0}, 0xbe9cfbf0)          = ? ERESTART_RESTARTBLOCK (To be restarted)

Toto je konec výpisu RT-vlákna s CANovskou komunikací:
clock_nanosleep(CLOCK_MONOTONIC, 0, {0, 5000000}, NULL) = 0
clock_gettime(CLOCK_MONOTONIC, {260, 256294756}) = 0
write(4, "\2\6\0\0\3\vuvpqrst", 13)     = 13
read(4, 0x40a74a54, 900)                = -1 EAGAIN (Resource temporarily unavailable)
clock_nanosleep(CLOCK_MONOTONIC, 0, {0, 5000000}, NULL) = 0
clock_gettime(CLOCK_MONOTONIC, {260, 279232786}) = 0
write(4, "\2\2\0\0\10\341\213\0\0\0\0\0\0", 13) = 13
read(4, "\202\5\0\0\0\0\0\0p\10 \0\0\0\0\0\0\0", 900) = 18
clock_nanosleep(CLOCK_MONOTONIC, 0, {0, 5000000}, NULL) = 0
clock_gettime(CLOCK_MONOTONIC, {260, 306808469}) = 0
write(4, "\2\2\0\0\10\347\3\0\0\0\0\0\0", 13) = 13
read(4, 0x40a74a54, 900)                = -1 EAGAIN (Resource temporarily unavailable)
clock_nanosleep(CLOCK_MONOTONIC, 0, {0, 5000000}, NULL) = 0
clock_gettime(CLOCK_MONOTONIC, {260, 364585365}) = 0
write(4, "\2\2\0\0\10\350\207\0\0\0\0\0\0", 13) = 13
read(4, 0x40a74a54, 900)                = -1 EAGAIN (Resource temporarily unavailable)
clock_nanosleep(CLOCK_MONOTONIC, 0, {0, 5000000}, 0) = ? ERESTART_RESTARTBLOCK (To be restarted)
+++ killed by SIGSEGV +++

A toto je konec výpisu RT-vlákna, ve kterém je i komunikace UDP:
clock_gettime(CLOCK_MONOTONIC, {259, 901678464}) = 0
SYS_292(0x5, 0x1c4d8, 0x5dc, 0x40, 0x1bed8) = 10
SYS_290(0x5, 0x1afdc, 0x44, 0x40, 0x1bed8) = 68
clock_gettime(CLOCK_MONOTONIC, {259, 928658038}) = 0
   //// následuje několik dalších stejných clock_gettime, ty jsem vynechal
clock_gettime(CLOCK_MONOTONIC, {260, 154709877}) = 0
clock_gettime(0x3 /* CLOCK_??? */, {2, 400000000}) = 0
clock_nanosleep(CLOCK_MONOTONIC, 0, {0, 5000000}, NULL) = 0
clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, {253, 337682067}, NULL) = 0
clock_gettime(CLOCK_MONOTONIC, {260, 183712766}) = 0
SYS_292(0x5, 0x1c4d8, 0x5dc, 0x40, 0x1bed8) = 46
SYS_290(0x5, 0x1afdc, 0x90, 0x40, 0x1bed8) = 144
clock_gettime(CLOCK_MONOTONIC, {260, 194218951}) = 0
    //// opět několik clock_gettime
clock_gettime(CLOCK_MONOTONIC, {260, 329479978}) = 0
clock_gettime(0x3 /* CLOCK_??? */, {2, 410000000}) = 0
clock_nanosleep(CLOCK_MONOTONIC, 0, {0, 5000000}, NULL) = 0
clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, {253, 437682067}, NULL) = 0
clock_gettime(CLOCK_MONOTONIC, {260, 356335446}) = 0
SYS_292(0x5, 0x1c4d8, 0x5dc, 0x40, 0x1bed8) = 10
--- SIGSEGV (Segmentation fault) @ 0 (0) ---

Tak, to je vše.
PM


Další informace o konferenci Linux