IL WaitPid () Monitor di chiamata di sistema un figlio del processo chiamante per i cambiamenti statali e recupera informazioni sul bambino il cui comportamento è cambiato. Il bambino è stato interrotto da un segnale o ripreso da un segnale considerato come uno spostamento di stato. In attesa di un figlio terminato consente al sistema di liberare le risorse associate al bambino; Se non viene condotta alcuna attesa, il bambino terminato rimarrà in "zombie" condizione.
IL Funzione di sistema WaitPid () Fa una pausa il processo attuale fino a quando l'argomento PID specifica un bambino che è cambiato. Il processo di chiamata viene messo in pausa fino a quando il processo di un bambino non si completa o viene terminato. Waitpid () Si ferma il processo di chiamata fino a quando il sistema non riceve informazioni sullo stato del bambino. Waitpid () ritorna rapidamente se il sistema ha già informazioni sullo stato su un bambino adatto quando viene chiamato. Se il processo del chiamante ottiene un segnale con l'azione di eseguire un gestore del segnale o di terminare il processo, waitpid () è terminato. IL funzione waitpid () Metterà in pausa l'esecuzione del thread del chiamante fino a quando non riceverà informazioni e aggiornamenti per uno dei suoi processi di figlio terminato o un segnale che eseguirà una procedura di cattura del segnale o termina il processo.
Esempio 1
Stiamo per elaborare il nostro primo esempio nel terminale di Ubuntu 20.04 Sistema operativo. Crea un file con il comando nano nella console, come rivelato di seguito. Spetta completamente a te selezionare un nome file.
$ nano aspetta.C
Puoi verificare che il file sia apparso GNU Nano Editor. Inserisci semplicemente il codice mostrato nell'immagine allegata.
In questo esempio, abbiamo usato per il ciclo per incrementare il processo. Chiama di sistema fork () è stato usato. IL Chiama di sistema fork () viene utilizzato per avviare un nuovo processo, noto come processo figlio, che funziona parallelamente a quello che ha fatto il Chiamata fork () al processo genitore. Dopo Chiama di sistema fork () Crea un nuovo processo di figlio, tutti i processi eseguiranno l'istruzione successiva. Non accetta input e restituisce un valore intero. Dopodiché è stata utilizzata la funzione del sonno.
La funzione Sleep () sospende il funzionamento del thread chiamante fino a quando non è passato l'intervallo di secondi in tempo reale forniti dai secondi del parametro, oppure viene dato un segnale al thread chiamante con l'azione di invocare una funzione di cattura del segnale o terminare il processi. Abbiamo aggiunto "1" come argomento. Mogliexited controlla lo stato di risoluzione del bambino restituito dall'attesa e Metodi WaitPid () per vedere se il processo del bambino è stato completato con successo.
Nella funzione principale di questo programma, il Chiama di sistema Wait () è stato chiamato. Una volta compreso questo codice, salva ed esci dal file e torna al terminale. Scrivi le istruzioni di seguito per l'esecuzione del codice. Abbiamo usato il Compilatore GCC in Ubuntu 20.04 sistema operativo.
$ GCC aspetta.C
$ ./UN.fuori
L'uscita può essere vista nell'immagine allegata.
Esempio 2
Stiamo per elaborare il nostro secondo esempio nel terminale del Ubuntu 20.04 Sistema operativo. Crea un file con il comando nano Nella console come presentata di seguito. Spetta a te selezionare un nome file.
$ nano waitpid.C
Puoi verificare che il file sia apparso GNU Nano Editor. Inserisci semplicemente il codice mostrato nell'immagine allegata.
Nel codice sopra mostrato, di nuovo, Chiama di sistema fork () è stato usato. Lo scopo del Chiama di sistema fork () è iniziare un nuovo processo, noto come processo figlio, che funziona in parallelo a quello che ha fatto il Chiamata fork () al processo genitore. Dopo Chiama di sistema fork () Crea un nuovo processo di figlio, tutti i processi eseguiranno l'istruzione successiva. Non accetta input e restituisce un valore intero. Exit_failure significa l'implementazione inefficace di un programma. IL funzione pausa () Aspetterò i segnali.
Se un bambino si è fermato ma non è stato rintracciato usando pTrace () chiamata di sistema, Svuotato sarà di ritorno. Sebbene questo parametro non sia selezionato, viene fornito lo stato dei bambini tracciati che si sono fermati. WContinato restituire se un bambino interrotto è stato riavviato da SigCont Broadcast. Wexitstatus (stato) Fornisce lo stato di uscita del bambino. Se Mogliexited ritorna vero, questa espressione dovrebbe essere usata solo. Viene restituita la frequenza del segnale che ha spinto la fine del processo del bambino Wtermsig (stato). Se Wifsignaled ha dato il "vero", questa espressione dovrebbe essere usata solo.
Viene restituito il numero del segnale che ha spinto il bambino a fermare Wstopsig (status). Se Wifstop ritorna vero, questa espressione dovrebbe essere usata solo. Wifsignaled (stato) restituisce vero se un segnale ha terminato il processo del bambino. Una volta compreso questo codice, salva ed esci dal file e torna al terminale. Scrivi le istruzioni di seguito per l'esecuzione del codice. Abbiamo usato il compilatore GCC in Ubuntu 20.04 Sistema operativo.
$ GCC Waitpid.C
$ ./UN.fuori
L'uscita può essere vista nell'immagine allegata.
Conclusione
Questa guida riguardava l'uso del Chiamata di sistema WaitPid () Nella programmazione C. Abbiamo dichiarato due esempi. Uno di questi è più semplice e facile. Una volta ottenuta la comprensione, puoi facilmente passare a quello complesso. Esegui entrambi gli esempi sul tuo sistema per semplificare la sperimentazione dell'uso del Chiamata di sistema WaitPid () Nella programmazione C.