Search code examples
shellparallel-processingwaitgnu-screen

Shell: How to use screen and wait for a couple of background processes in a shell script


I am writing a shell script for a couple of long running processes. First of all I need to run all commands in the screen session manager, so that the execution of a process does not end if a user has been disconnected. Later I need wait for some background processes, which has been created before, to end, so that the following process can start.

My question is how to start a screen session in a shell script and wait for the background processes to end.


Solution

  • You can't invoke screen (or nohup) on the running process, you have to do screen script. You could however do what nohup does, trap SIGHUP and redirect output to a file.

    exec > OUT 2>&1
    trap '' 1
    

    To wait for background processes, save the pid when you create it and then call wait

    foo&
    PID1=$!
    bar&
    PID2=$1
    wait $PID1 $PID2
    

    Or alternatively just wait for everything to finish.

    foo&
    bar&
    wait