Sto estendendo le funzionalità di una shell unix personalizzata che ho scritto come parte del mio compito di laboratorio. Attualmente supporta tutti i comandi tramite chiamate execvp, comandi incorporati come pwd, cd, cronologia, eco ed esportazione e anche reindirizzamento e pipe. Ora volevo aggiungere il supporto per l'esecuzione di un comando in background, ad es. $ ls -la & Voglio anche implementare i comandi di controllo del lavoro bg e fg.
So che questo può essere ottenuto se eseguo il comando biforcando un nuovo processo figlio e non aspettandolo nel processo genitore. Ma come faccio a portare nuovamente questo comando in foreground usando fg? Ho l'idea di inserire ogni comando di sfondo in una lista che assegna a ciascuno di essi un numero di serie. Ma non so come faccio a eseguire i processi in background, per poi riportarli in primo piano. Credo che le chiamate di sistema wait () e waitpid () sarebbero utili ma non mi sento a mio agio con loro. Ho provato a leggere le pagine man ma sono ancora nell'oscurità. Qualcuno può spiegare in un linguaggio di un laico come ottenere ciò nella programmazione del sistema UNIX? E ha qualcosa a che fare con i segnali SIGCONT e SIGSTP?