2010-09-09 14 views
7

Non riesco a trovare un buon modo per scoprire quando un processo termina in Linux. Qualcuno ha una soluzione per questo?Come scoprire quando il processo termina in Linux?

Uno che mi viene in mente è l'elenco dei processi di controllo periodicamente, ma non è istantaneo e piuttosto costoso (è necessario eseguire il ciclo su tutti i processi ogni volta).

C'è un'interfaccia per farlo su Linux? Qualcosa come waitpid, tranne qualcosa che può essere utilizzato da processi non correlati?

Grazie, Boda Cydo

+1

Scrivere un programma in C che fork() s ed exec() s? –

+0

Buon consiglio Dave. Ho intenzione di farlo in questo modo per ora. – bodacydo

risposta

2

Forse si può avviare il programma insieme a un altro programma, il secondo fare tutto ciò che è che vuoi fare quando il primo programma si arresta, come l'invio di una notifica ecc

si consideri questo esempio molto semplice:

sleep 10; echo "finished" 

sleep 10 è il primo processo, echo "finished" la seconda (se l'eco di solito è un plugin di shell, ma spero di ottenere il p oint)

1

Se si conosce il PID del processo in questione, è possibile verificare se esiste/proc/$ PID. Questa è una chiamata stat() relativamente economica.

+1

Questo non funziona. Potrebbe esserci una condizione di competizione. – bodacydo

+0

Concordato sulle condizioni della gara. I Pids vengono riciclati, quindi usando questa tecnica da soli, non c'è alcuna garanzia che il processo in esecuzione sotto quel pid sia il processo originale. –

4

Non si può aspettare un processo non correlato, solo i bambini.

Un metodo di polling più semplice di controllare la lista dei processi, se avete il permesso, è possibile utilizzare la chiamata di sistema kill(2) e "Invia" segnale 0.

Dalla pagina kill(2) man:

Se sig è 0, quindi non viene inviato alcun segnale, ma il controllo degli errori viene ancora eseguito; questo può essere utilizzato per verificare l'esistenza di un ID processo o ID processo gruppo

2

Un'altra opzione è quella di avere il processo di aprire un oggetto IPC quale un socket di dominio unix; il tuo processo di watchdog può rilevare quando il processo si interrompe poiché verrà immediatamente chiuso.

Problemi correlati