A wrapper script sets a few variables and ends with the line exec /usr/bin/myapp "$@", after which two cleanup commands are written. What happens when the script runs?
LPIC-1 Exam 102-500, objective 105. Shells and shell scripting hard
Machine-checked — no person has signed for it. This question was read against the source cited below by an automated pass, which found no contradiction. That is a weaker claim than it sounds: the same kind of process wrote the question, so it can confirm its own mistake.
Treat it as a good draft rather than as settled fact, and read the source below before you rely on it. It is not used in mock exams here — only questions a person has signed for are.
How these questions are written — where each question comes from, what the verification ledger records, and what happens when one is found wrong.
The options
Correct myapp replaces the shell in the same process, keeping its PID, and the two cleanup commands never run
Correct. exec with a command argument overlays the current shell process with the new program. There is no shell left to return to, so nothing after that line is ever executed.
Not correct myapp runs as a child process, and the cleanup commands run once it exits
Wrong. That is what happens without exec: the shell forks, waits for the child, then carries on. exec is precisely the instruction not to fork.
Not correct myapp runs in a subshell and the script continues immediately in parallel
Wrong. Running in parallel is what a trailing & does. exec neither backgrounds nor subshells anything.
Not correct The script fails, because exec may only be used with redirections and not with a command
Wrong, and reversed. exec accepts a command, and it is the form without a command that is special: exec with only redirections applies them to the current shell and execution continues.
Why
exec calls execve on the current process rather than forking first, so the new program inherits the PID, the open file descriptors and any environment the wrapper set up. This makes it the standard last line of a launcher script: no idle shell hangs around as a parent, and signals or a service manager's process tracking reach the real program directly. Used without a command, exec instead applies its redirections to the shell itself, as in exec >> /var/log/run.log 2>&1.
Where this comes from
- Cited
- manual page bash(1)
Practise this
Reading one question is not practice. The trainer will draw a short set from objective 105 and space the ones you get wrong.
More questions on this objective
- A user logs in at a text console, and bash starts as an interactive login shell. Which file in that user's home directory is read by bash itself as part of login startup? machine-checked
- You are already logged in to a graphical desktop and open a new terminal window, so bash starts as an interactive shell that is not a login shell. Which per-user file does bash read in that case? machine-checked
- An executable script contains only the line `export EDITOR=vim`. After running it as `./setenv.sh`, `echo $EDITOR` in the calling shell prints nothing. What explains this? machine-checked
- In bash, what is the effect of `export MYVAR`? machine-checked
- At a bash prompt you run `alias ll='ls -l'` and it works for the rest of that session, but a terminal window opened afterwards does not recognise `ll`. Which statement explains this and gives the standard remedy? machine-checked
- A command finishes and the shell reports an exit status of 0. What does that mean, and which parameter reports it? machine-checked