Newsgroup: it.comp.os.unix
Titolo: Get Name By PID e viceversa.

Ciao a tutti,
devo trovare il modo, tramite l'utilizzo di una routine in C, di poter
farmi ritornare il Nome di un processo partendo dal suo PID e
viceversa, cioe partendo dal nome ed arrivare al PID.
Grazie mille

 cioe partendo dal nome ed arrivare al PID.
Ciao,
 speravo ti rispondesse qualcuno piu' ferrato di me ... stando a quel che 
mi risulta, non esiste una maniera portabile per affrontare questo 
problema ... ogni Unix e' libero di gestire queste informazioni a modo 
suo.
Sotto Linux trovi tutto sotto /proc, per gli altri Unix non so ...
Forse l'unico modo e' studiare la documentazione del programma ps su tutti 
i SO sui quali vuoi far girare la tua applicazione, e poi usare gli #ifdef 
nel tuo codice.
Cmq, nota che la ricerca per nome non e' detto che ti dia un solo 
risultato ...
 Ciao
 Federico

Ciao,
innanzitutto grazie per la risposta, l'unico modo che ho trovato è
quello di andar vedere la dir /proc pero questo ha un inconveniente non
da poco...va bene se il programma giro come root.
Infatti sto cerca ndo un alternativa valida...se a qualcuno viene in
mente.
Grazie mille.
P.S.: il tutto per un Solaris 8.

 da poco...va bene se il programma giro come root.
Ciao,
 per caso "ps" e' setuid-ato sotto Solaris 8? Se non lo e', sicuramente 
concordiamo sul fatto che deve esserci un modo alternativo!
Hai provato a far girare ps sotto strace? A quali file accede?
 Ciao
 Federico

Scusami ma mi dovresti spiegare piu chiaramente visto la mia poca
esperienza di programmazione in ambiente Unix
Grazie milleeeee

 Hai provato a far girare ps sotto strace? A quali file accede?
  Il comando Solaris che equivale allo strace linuxaro č truss:
16005600@tlfdb1 ~$ truss ps
execve("/usr/bin/ps", 0xFFBEF7FC, 0xFFBEF804)  argc = 1
resolvepath("/usr/lib/ld.so.1", "/usr/lib/ld.so.1", 1023) = 16
open("/var/ld/ld.config", O_RDONLY)             Err#2 ENOENT
stat("/opt/SUNWspro/lib/libc.so.1", 0xFFBEEE00) Err#2 ENOENT
stat("/usr/openwin/lib/libc.so.1", 0xFFBEEE00)  Err#2 ENOENT
stat("/usr/dt/lib/libc.so.1", 0xFFBEEE00)       Err#2 ENOENT
stat("/app/oracle/product/8.1.7/lib/libc.so.1", 0xFFBEEE00) Err#2 ENOENT
stat("/dati/local/lib/libc.so.1", 0xFFBEEE00)   Err#2 ENOENT
stat("/usr/local/lib/libc.so.1", 0xFFBEEE00)    Err#2 ENOENT
stat("/usr/lib/libc.so.1", 0xFFBEEE00)          = 0
open("/usr/lib/libc.so.1", O_RDONLY)            = 3
mmap(0x00000000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF390000
mmap(0xFF3A4FF4, 802816, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE|MAP_ANON,
-1, 0) = 0xFF280000
mmap(0xFF280000, 702440, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0)
= 0xFF280000
mmap(0xFF33C000, 24772, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_FIXED, 3, 704512) = 0xFF33C000
munmap(0xFF32C000, 65536)                       = 0
memcntl(0xFF280000, 113528, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
close(3)                                        = 0
stat("/opt/SUNWspro/lib/libdl.so.1", 0xFFBEEE00) Err#2 ENOENT
stat("/usr/openwin/lib/libdl.so.1", 0xFFBEEE00) Err#2 ENOENT
stat("/usr/dt/lib/libdl.so.1", 0xFFBEEE00)      Err#2 ENOENT
stat("/app/oracle/product/8.1.7/lib/libdl.so.1", 0xFFBEEE00) Err#2 ENOENT
stat("/dati/local/lib/libdl.so.1", 0xFFBEEE00)  Err#2 ENOENT
stat("/usr/local/lib/libdl.so.1", 0xFFBEEE00)   Err#2 ENOENT
stat("/usr/lib/libdl.so.1", 0xFFBEEE00)         = 0
open("/usr/lib/libdl.so.1", O_RDONLY)           = 3
mmap(0xFF390000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) =
0xFF390000
mmap(0xFF3A4FF4, 8192, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE|MAP_ANON, -1,
0) = 0xFF380000
mmap(0xFF380000, 2302, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xFF380000
close(3)                                        = 0
stat("/usr/platform/SUNW,Sun-Fire/lib/libc_psr.so.1", 0xFFBEEB80) = 0
open("/usr/platform/SUNW,Sun-Fire/lib/libc_psr.so.1", O_RDONLY) = 3
mmap(0xFF390000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) =
0xFF390000
close(3)                                        = 0
brk(0x00021148)                                 = 0
brk(0x00023148)                                 = 0
sysinfo(514, "", 1)                             = 98
sysinfo(514, "sparcv9+vis2 sparcv9+vis sparcv9 sparcv8plus+vis sparcv8plus
sparcv8 sparcv8-fsmuld sparcv7 sparc", 98) = 98
open("/proc/self/auxv", O_RDONLY)               = 3
fstat(3, 0xFFBEF5E8)                            = 0
read(3, "\0\007D8FFBEFFDB\0\007DE".., 152)      = 152
close(3)                                        = 0
access("/usr/bin/sparcv9+vis2/ps", 1)           Err#2 ENOENT
access("/usr/bin/sparcv9+vis/ps", 1)            Err#2 ENOENT
access("/usr/bin/sparcv9/ps", 1)                = 0
execve("/usr/bin/sparcv9/ps", 0xFFBEF7FC, 0xFFBEF804) Err#13 EACCES
pswrite(2, " p s", 2)                           = 2
: execve("write(2, " :   e x e c v e ( "", 10)          = 10
/usr/bin/sparcv9/pswrite(2, " / u s r / b i n / s p a".., 19)   = 19
") failed
write(2, " " )   f a i l e d\n", 10)            = 10
access("/usr/bin/sparcv8plus+vis/ps", 1)        Err#2 ENOENT
access("/usr/bin/sparcv8plus/ps", 1)            Err#2 ENOENT
access("/usr/bin/sparcv8/ps", 1)                Err#2 ENOENT
access("/usr/bin/sparcv8-fsmuld/ps", 1)         Err#2 ENOENT
access("/usr/bin/sparcv7/ps", 1)                = 0
execve("/usr/bin/sparcv7/ps", 0xFFBEF7FC, 0xFFBEF804) Err#13 EACCES
pswrite(2, " p s", 2)                           = 2
: execve("write(2, " :   e x e c v e ( "", 10)          = 10
/usr/bin/sparcv7/pswrite(2, " / u s r / b i n / s p a".., 19)   = 19
") failed
write(2, " " )   f a i l e d\n", 10)            = 10
access("/usr/bin/sparc/ps", 1)                  Err#20 ENOTDIR
pswrite(2, " p s", 2)                           = 2
: cannot find/execute "write(2, " :   c a n n o t   f i n".., 23)       =
23
pswrite(2, " p s", 2)                           = 2
" in ISA subdirectories
write(2, " "   i n   I S A   s u b".., 24)      = 24
llseek(0, 0, SEEK_CUR)                          = 184309
_exit(1)
-- 
Alessandro Selli
http://alessandro.route-add.net
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ") failed
  Eccoli!
16005600@tlfdb1 ~$ ls -l /usr/bin/sparcv9/ps
-r-sr-xr-x   1 root     sys        37096 Mar 16  2000 /usr/bin/sparcv9/ps*
16005600@tlfdb1 ~$ ls -l /usr/bin/sparcv7/ps
-r-sr-xr-x   1 root     sys        28196 Mar 16  2000 /usr/bin/sparcv7/ps*
  Che infatti funzionano:
16005600@tlfdb1 ~$ /usr/bin/sparcv7/ps
   PID TTY      TIME CMD
 29364 pts/16   0:01 bash
16005600@tlfdb1 ~$ /usr/bin/sparcv9/ps
   PID TTY      TIME CMD
 29364 pts/16   0:01 bash


 write(2, " "   i n   I S A   s u b".., 24)      = 24
Come mai il ps non ha funzionato? E' un problema di quella macchina o di 
truss?
 Ciao
 Federico

 esperienza di programmazione in ambiente Unix
Ciao,
 non e' un problema di programmazione ma di gestione del sistema. Temo che
l'unica cosa da fare sia prendere in mano il manuale stampato di Solaris 8
e cominciare a darci una bella occhiata :-)
Quando saprai dove cercare le informazioni che ti servono, allora 
implementarlo in codice C sara' abbastanza facile.
 Ciao
 Federico

 truss?
  Non so come mai trovo questi messaggi nell'output di truss,
che infatti ps procede tranquillamente e correttamente l'esecuzione.
Boh!


 infatti ps procede tranquillamente e correttamente l'esecuzione.
Ciao,
 se truss e' il corrispondente di strace sotto Linux, probabilmente 
avranno limitazioni simili sugli eseguibili con il setuid ...
 Ciao
 Federico