Annyit segítek, hogy ezt AIX-on sikerült előadni, Linuxon ilyen:
ps -o pid,ppid,user,group,etime,tty,priority,nice,time,state,vsize,pcpu,pmem,wchan,args -p 6881
PID PPID USER GROUP ELAPSED TT PRI NI TIME S VSZ %CPU %MEM WCHAN COMMAND
6881 6880 projects devel 00:19 pts/3 20 0 00:00:00 Z 0 0.0 0.0 - [cronolog.sh] <defunct>
- NevemTeve blogja
- A hozzászóláshoz be kell jelentkezni
Hozzászólások
Mellékszál: bizonyos helyzetben a központi statiszikai shell egy zombi-processzt hagy nekem hátra, de olyan ügyes módon, hogy a szülő a wait
helyett egy execve
-t hajt végre, így a zombi szülője egy ártatlan harmadik program lesz. Így lehet reprodukálni:
fun () {
printf '%s Foprogram indul\n' "$(date +%Y%m%d.%H%M%S)"
sleep 30
printf '%s Foprogram vege\n' "$(date +%Y%m%d.%H%M%S)"
}
(fun & echo $! >cronlog.pid) 2>&1 | /usr/local/bin/cronolog cronlog_test_%Y%m%d.log &
- A hozzászóláshoz be kell jelentkezni
Erre végül a következő workaround született: use bash instead
- A hozzászóláshoz be kell jelentkezni
CURRENT_YEAR-ben, normal rendszeren (<32MB RAM-mal rendelkezo beagyazott eszkozoket kiveve) mi ertelme van bash helyett mast hasznalni? Eroforrasban nincs akkora kulonbseg, szivasban meg lehet.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Értelme nem sok. Tán csak annyi, hogy működjön az operációs rendszer.
- A hozzászóláshoz be kell jelentkezni
Hát a `dash`-nak például van niche-e: vele lehet a hordozható scripteket írni, mivel az volt a fejlesztésének a célja, hogy semmilyen plusz ne legyen benne, csak az, amit a Posix kifejezetten előír. Például a °printf` a dash-ban \xHH szekvenciát nem kezel, csak \OOO szekvenciát.
- A hozzászóláshoz be kell jelentkezni
Vajon miért futtatod subshellben? Így tisztább, szárazabb érzés. ;)
{ fun 2>&1 & echo $! >cronlog.pid 2>/dev/null ; } | /usr/local/bin/cronolog cronlog_test_%Y%m%d.log &
- A hozzászóláshoz be kell jelentkezni
Jogos felvetés, de sajnos nem változtat a defunct processz megjelenésén; számos variációt eljátszottam (például (kerek) vagy {kapcsos} zárójel, Aix vagy Linux), végül arra jutottam, hogy egy dolog számít: ksh vagy bash (vagy dash)
- A hozzászóláshoz be kell jelentkezni
Azt is figyeld meg, hogy az átirányítások is szebbek! Ezzel a defunct keletkezése is elmaradhat.
A defunct processz már lefutott, csak a leírójának a maradékát nem sikerült kilapátolni. Miért érdekes a kernel deja vu érzése?
- A hozzászóláshoz be kell jelentkezni
Sajnos a ksh eszén nem lehet túljárni ilyen trükkökkel...
Gondnak meg több okból is gond, pl.: a felesleges sorok a 'ps x' kimenetében elvonhatják a figyelmet a valós problémákról; a processzek száma limitált lehet, hogy pl.:
/usr/sbin/lsattr -E -l sys0 | grep maxuproc
maxuproc 128 Maximum number of PROCESSES allowed per user True
- A hozzászóláshoz be kell jelentkezni
https://www.ibm.com/docs/en/iis/11.5?topic=linux-setting-maximum-number-processes-parallel-jobs-aix
Tipp: AIX alatt (is) nmon-t használok. Linuxra az nmonrrd-t dolgoztam át alaposan, amivel a kollégák vizuálisan ellenőriznek. Ha nem stimmel az ábra, akkor hívnak. :(
- A hozzászóláshoz be kell jelentkezni
Na szóval a gond ott lenne, hogy én programból dolgoznám fel a 'ps' kimenetét, szóközzel elválasztott részeket keresve. Nem valami tudományos módszer, de az AIX-os zombi processznél különösen nem sikerül, mivel annál hét mező értéke üresen marad.
- A hozzászóláshoz be kell jelentkezni
Te a ps és a processzek OS-beli kezelésének a Linuxban megismert működését várod el AIX alatt, ott a gond...
- A hozzászóláshoz be kell jelentkezni
Még jó hogy nem töltöttem időt a rejtvénnyel. "Ami nincs azt ne keresd! Mondta a kis Szekeres."
- A hozzászóláshoz be kell jelentkezni
Speciel nekem az is elég lenne, ha a USER, GROUP, ELAPSED stb mezők helyére odacsapná, hogy 'to-save-memory-I-have-destroyed-this-bit-of-information'
Szerk: Vagy lenne egy POSIX-szabványosított `ps` rendszerhívás, amivel ezeket az információkat be lehet szerezni. (Hangos derültség a karzaton.)
- A hozzászóláshoz be kell jelentkezni
Nagyon elegánsan és egyszerűen lehet ezt is kezelni, pl.:
harap (&bln, (BuffData *)&bpid, (BuffData *)&bln, ' '); /* ps -o pid */
harap (&bln, (BuffData *)&bppid, (BuffData *)&bsave, ' '); /* ps -o ppid */
bln= bsave;
harap (&bln, (BuffData *)&busr, (BuffData *)&bln, ' '); /* ps -o user */
harap (&bln, (BuffData *)&bgrp, (BuffData *)&bln, ' '); /* ps -o group */
harap (&bln, (BuffData *)&belt, (BuffData *)&bln, ' '); /* ps -o etime */
harap (&bln, (BuffData *)&btty, (BuffData *)&bln, ' '); /* ps -o tty */
#if defined(_AIX)
{
ConstBuffData bdiff;
bdiff.ptr= bppid.ptr + bppid.len;
bdiff.len= busr.ptr - bdiff.ptr;
if (bdiff.len>=38) { /* feltesszuk, hogy ez egy zombi, es 'user','group','etime','tty' ures */
busr.len= 0;
bgrp.len= 0;
belt.len= 0;
btty.len= 0;
bln= bsave;
}
}
#endif
- A hozzászóláshoz be kell jelentkezni