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?
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?