PDA

View Full Version : [Win] Socket aperto da un processo inesistente


tomminno
27-11-2009, 11:34
Mi sto ritrovando di fronte ad una situazione insolita:
ho un programma scritto da me che apre un socket server e fa le solite cose che ci si aspettano da un server. Su una macchina (e solo su questa) quando chiudo il server il processo non risulta più visibile dal taskmanager, ma se vado ad eseguire netstat -nab ottengo che il pid del vecchio processo ha ancora aperto il socket (il processo è però associato a "Sistema" invece che all'eseguibile corretto). Infatti successive istanze mi avvisano che la porta è già occupata.
Oltretutto risulta ancora un client connesso ed effettivamente se vado ad analizzare il client pare effettivamente essere così.
Ok a questo punto uno pensa: bene un bug di programma ti sei dimenticato di chiudere il socket (anche se abilitando i log vedo che la chiusura dà ok).

Ora però mi accorgo che in realtà il processo è ancora in esecuzione perchè se termino il socket in ascolto tramite tcpview, vedo che questo viene riaperto (comportamento previsto dal programma) dallo stesso PID che non risulta esistente nè tramite task manager nè process XP.

Se provo ad eseguire PSKill tramite il pid del processo ottengo un fantastico accesso negato. Segno che il processo effettivamente esiste! Altrimenti dovevo ottenre il messaggio che il processo non esiste. Ovviamente sono amministratore quindi ho i permessi per eseguire il kill.

Il processo non è un servizio.

Domanda: in cosa cavolo sono incappato?

wingman87
27-11-2009, 12:52
Che casino! Ma quindi se provi a contattare il server da client dopo aver chiuso il server, quest'ultimo continua a rispondere correttamente?

tomminno
27-11-2009, 13:17
Che casino! Ma quindi se provi a contattare il server da client dopo aver chiuso il server, quest'ultimo continua a rispondere correttamente?

Si funziona perfettamente, come se fosse effettivamente attivo in tutto e per tutto.
Solo che il programma non ha mai dato questo tipo di problema, almeno non su un altro centinaio di macchine...

fero86
27-11-2009, 15:42
secondo me il socket non c'entra niente, é un problema di altra natura: il processo c'é e continua a funzionare, mi pare ovvio, solo che non si chiude e se provi a chiuderlo scompare dall'elenco dei processi ma resta in funzione. curiosissimo che quando il processo ti entra in questo stato strano i suoi handles (perlomeno il socket) vengano associati a "Sistema"; per "Sistema" intendi l'account built-in o il processo System (quello col PID 4)?
di preciso su che sistema stai?

tomminno
27-11-2009, 16:09
secondo me il socket non c'entra niente, é un problema di altra natura: il processo c'é e continua a funzionare, mi pare ovvio, solo che non si chiude e se provi a chiuderlo scompare dall'elenco dei processi ma resta in funzione. curiosissimo che quando il processo ti entra in questo stato strano i suoi handles (perlomeno il socket) vengano associati a "Sistema"; per "Sistema" intendi l'account built-in o il processo System (quello col PID 4)?
di preciso su che sistema stai?

La versione italiana di netstat riporta "[Sistema]" come nome del processo che ha aperto i socket e con quel nome generalmente indica il processo System con PID=4, nel mio caso invece riporta il nome [Sistema] con il PID del processo chiuso.
Prima della chiusura dell'applicativo invece appare il nome dell'eseguibile correttamente.

Il sistema è WinXP SP3.