SSH2, Screen majd Process id visszanyerése de hogyan?

Üdv.

Elkezdtem írni egy webes admin felületet de elakadtam ott hogy az ssh2 protokollon keresztül elindított programnak visszakapjam a Process ID-ját
Vagyis inkább úgy írnám le hogy visszakapok egy ID-t de sajna az az igazi ID-nek az eggyel kisebb változata.

Példa:
amit a PHP visszaad: 1233
Linuxba pedig: 1234

A forráskódom:
$stream = ssh2_exec($con, 'cd /home/user; screen -A -m -d -S user ./parancs > /dev/null & echo $!');

stream_set_blocking($stream, true);
$data = "";

while ($buf = fread($stream,4096)){
$data .= $buf;
}

fclose($stream);
echo "
";
echo "PID: ".(int)$data;

Tehát a nagy kérdésem az az lenne hogy a valós PID-hez képest miért ad vissza a PHP 1-el kisebb értéket? Valakinek valami ötlet?
Előre is köszönöm a segítséget

Hozzászólások

mert a screen "viewer" pidjet adja vissza, es nem a benne futtatott programet vagy a hatterben maradt screen "core"-et, az meg hogy egymas utani szamok, az meg az miatt lehet, hogy nem randomizalod PID-jeid, ha randomizalnad, akkor teljesen mast adna vissza


19610  pc  Is     0:00.16 `-- /bin/tcsh
42501  pc  S+     0:00.01   `-- screen yes
42645  ??  Rs     0:16.26     `-- screen yes
42897  pd  Rs+    0:17.34       `-- yes

___
info

1. nem masztam bele a screenbe annyira, de pstree-bol fel tudod epiteni
2. sysctl kern.randompid=300 kernel oldali resze meg forrasban van, ami publikus - a lenyege, hogy a pid-ek nem egymast kovetoen vannak kiosztva, hanem random szam van hozzaadva / sorsolva
___
info


screen -ls

de itt a screen multiplexere'nek a pid-je't kapod vissza. ez eggyel tobb mint amit a $! visszaad, viszont az a processz, amit elinditottal, annak nem ugyanaz a pid-je mint a screen multiplexere'nek:


apal@szofi:~$ screen -A -m -d sleep 100 &
[2] 17168
apal@szofi:~$ echo $!
17168
[2]+  Done                    screen -A -m -d sleep 100
apal@szofi:~$ ps -A xuf | tail -n 2
apal     17169  0.0  0.0  27880  1040 ?        Ss   21:49   0:00 SCREEN -A -m -d sleep 100
apal     17170  0.0  0.0  12364   644 pts/7    Ss+  21:49   0:00  \_ sleep 100

ez abbol is latszik, hogy a "&" az lenyegeben szuksegtelen, mert a `screen` maga megcsinalja a forkos levalasztast es a multiplexert (itt a 17169) megteszi processz leadernek. ez eleg gyakori trukk.

ha a tenylegesen futo parancsnak (fenti peldaban a 17170-esnek) a pid-jere vagy kivancsi, azt nem tudom hogyan lehet lekerdezni igy elsore. a `screen -ls` kiirja az aktualisan futo screeneket, de ott is csak a multiplexer pidje't kapod vissza, azon a ne'ven hivatkozol amikor `screen -r` segitsegevel visszatersz. a futo parancs az ennek a child-je (ott nyilvan nincs session leader, mert szopoag lenne ha nem tudna a multiplexer hogy a parancs az mikor is allt le).

A