Make Unrar Wait for Another Process to Finish

The unrar utility does not possess a native configuration flag to pause execution until another application terminates. However, you can achieve this behavior seamlessly by wrapping unrar with standard operating system shell commands and process management tools. This guide details how to make unrar wait for an active process to finish on both Linux and Windows systems.

Method 1: Chaining Commands Directly (Linux & Windows)

If you are launching both the initial process and the unrar command in the same script or terminal session, use the conditional execution operator (&&). This ensures unrar runs only after the preceding command exits successfully.

Linux / macOS:

download_tool files.rar && unrar x files.rar

Windows (Command Prompt / PowerShell):

download_tool.exe files.rar && unrar.exe x files.rar

Method 2: Waiting by Process ID (PID) on Linux

If the target process is already running independently, locate its Process ID (PID) using ps or pgrep, then use tail or wait to halt execution until that PID closes.

Using tail --pid

The tail command can monitor a PID and exit automatically when the process dies:

tail --pid=1234 -f /dev/null && unrar x archive.rar

Replace 1234 with the PID of the process you need to wait for.

Using wait

If the target process was started as a background job in the current shell session:

wait 1234 && unrar x archive.rar

Method 3: Waiting by Process Name on Linux

When you only know the executable name (for example, waiting for a torrent client or another decompression task), loop until pgrep returns a non-zero exit code:

while pgrep -x "target_process" > /dev/null; do
    sleep 3
done
unrar x archive.rar

This loop checks every three seconds. Once target_process exits, the loop breaks and unrar executes.


Method 4: Waiting for a Process on Windows (PowerShell)

On Windows systems, PowerShell provides the Wait-Process cmdlet, which blocks execution until the specified process shuts down.

By Process Name:

Wait-Process -Name "target_process"; & unrar.exe x archive.rar

By Process ID:

Wait-Process -Id 1234; & unrar.exe x archive.rar

In Windows Batch (.bat):

If using a standard batch script without PowerShell, monitor the process with tasklist:

:loop
tasklist /fi "imagename eq target_process.exe" | find /i "target_process.exe" >nul
if not errorlevel 1 (
    timeout /t 3 /nobreak >nul
    goto loop
)
unrar.exe x archive.rar