Background processes (&) in Linux CLI - Time & Space Complexity
When running commands in the background using &, we want to understand how this affects the time it takes for our script or terminal session to proceed.
We ask: How does running commands in the background change the overall execution time?
Analyze the time complexity of running commands with and without &.
for i in {1..5}; do
sleep 2
echo "Done $i"
done
for i in {1..5}; do
sleep 2 &
echo "Started $i"
done
wait
This snippet runs 5 sleep commands sequentially first, then runs 5 sleep commands in the background and waits for all to finish.
Look at the loops and commands that repeat.
- Primary operation: Running the
sleep 2command 5 times. - How many times: 5 times in both loops.
- The difference is whether each
sleepruns one after another or all start together in the background.
Imagine increasing the number of commands (n) from 10 to 100 to 1000.
| Input Size (n) | Approx. Operations (Total Time) |
|---|---|
| 10 | About 20 seconds sequential, about 2 seconds background |
| 100 | About 200 seconds sequential, about 2 seconds background |
| 1000 | About 2000 seconds sequential, about 2 seconds background |
Pattern observation: Sequential time grows linearly with n, but background time stays roughly the same because commands run at the same time.
Time Complexity: O(n) for sequential, O(1) for background with wait
This means running commands one after another takes longer as you add more, but running them all in the background lets them finish together, keeping total time almost constant.
[X] Wrong: "Running commands in the background always makes the script finish instantly."
[OK] Correct: The script may start commands quickly, but it still needs to wait for them to finish if you want results, so total time depends on the longest command.
Understanding how background processes affect execution time shows you can manage tasks efficiently, a useful skill in scripting and automation jobs.
"What if we removed the wait command after starting background processes? How would the time complexity and script behavior change?"
Practice
& at the end of a command in Linux do?Solution
Step 1: Understand the role of
Adding&in Linux commands&at the end of a command tells the shell to run it in the background.Step 2: Effect on terminal usability
Running a command in the background frees the terminal immediately for other commands.Final Answer:
Runs the command in the background, freeing the terminal immediately -> Option CQuick Check:
Background process = command + & [OK]
- Thinking & stops the command
- Confusing & with output redirection
- Assuming & increases priority
sleep 10 in the background?Solution
Step 1: Identify correct placement of
The&&must be at the end of the command to run it in the background.Step 2: Check each option
sleep 10 & places&correctly aftersleep 10. Others place it incorrectly or use wrong syntax.Final Answer:
sleep 10 & -> Option DQuick Check:
Command + & at end = background run [OK]
- Placing & before the command
- Using && instead of &
- Splitting & from command arguments
sleep 5 & jobs
Solution
Step 1: Run
This starts the sleep command in the background for 5 seconds.sleep 5 &Step 2: Run
This command lists all background jobs currently running, including the sleep job.jobsFinal Answer:
Lists the sleep job running in the background -> Option BQuick Check:
jobs shows background tasks [OK]
- Expecting jobs to show nothing
- Confusing jobs with ps command
- Thinking sleep runs in foreground without &
sleep 10 & but the job does not appear when you run jobs. What is the likely problem?Solution
Step 1: Understand job control scope
Background jobs are tracked per shell session. Runningjobsin a different session won't show jobs from another.Step 2: Check other options
Sleep supports background execution, & was used, and jobs is a built-in command, so those are unlikely issues.Final Answer:
You ran the command in a different shell session -> Option AQuick Check:
jobs show current shell's background tasks only [OK]
- Assuming jobs shows all system background tasks
- Thinking sleep can't run in background
- Believing jobs is an external command
backup.sh in the background and bring it to the foreground later. Which sequence of commands is correct?Solution
Step 1: Run the script in background
Use./backup.sh &to start the script in the background.Step 2: Bring the background job to foreground
Usefg %1to bring job number 1 (the backup script) to the foreground.Step 3: Analyze options
./backup.sh & fg %1correctly runs the script in background and then brings job 1 to foreground../backup.sh && fguses logical && instead of &, so runs in foreground../backup.sh & jobs; fg %2uses wrong job number %2../backup.sh & bg %1uses bg which resumes background jobs, not foreground.Final Answer:
./backup.sh & fg %1 -> Option AQuick Check:
Run with & then fg %job_number to foreground [OK]
- Using && instead of & for background
- Using bg instead of fg to foreground
- Using wrong job number like %2
Ready to prove it?
Pass the test and this pattern moves unknown
