How to pause a running processes and resume after some time in Linux or Unix ?

Today we will check how to pause a running task on linux so that we can resume it after some time.

Suppose you ran a task to download multiple packages, however there is an activity of network restart and you want to pause the download so that it doesn’t get killed/interrupted itself.

Hence we can pause this task and after the activity gets over, we can resume the task again.

Here is an example:- I am started a job to download all my system packages, now we will see how to interrupt this task and resume again.

I. Stopping and resuming current jobs
In this section, we will see how to stop and resume currently running jobs in current shell.

1. Started the Job

[root@nglinux pkg2]# rpm -qa | xargs yumdownloader
bison-2.4.1-5.el6.i686.rpm                                                                  | 626 kB     00:04     
nss-sysinit-3.28.4-4.el6_9.i686.rpm                                                         |  51 kB     00:00     
avr-gcc-c++-4.5.0-2.el6.i686.rpm                                                            | 3.0 MB     00:08     
xfce4-notes-plugin-1.7.7-1.el6.i686.rpm                                                     | 146 kB     00:00     
texlive-texmf-2007-39.el6_7.noarch.rpm                                                      | 2.8 MB     00:11     

2.Now stopping this job by pressing Ctrl+Z

squirrel-libs-2.2.4-2.el6.i686.rpm                                                          | 131 kB     00:00     
perl-Text-Unidecode-0.04-7.1.el6.noarch.rpm                                                 | 115 kB     00:00     
^Zpertux-0.3.4-1.el6.i686.rpm              94% [===============================  ] 394 kB/s |  61 MB     00:09 ETA 
[1]+  Stopped                 rpm -qa | xargs yumdownloader

Are you thinking you killed the job ? No thats wrong, you just stopped or paused it…
P.S:- Killing was done by Ctrl+C, not by Ctrl+Z or knife 😛

3.Now check the stopped jobs.

[root@nglinux pkg2]# jobs
[1]+  Stopped                 rpm -qa | xargs yumdownloader
[root@nglinux pkg2]# 

We have only one job with stopped/paused state.

4. Now resume this job by running via JOB ID with fg(to bring the job to foreground or on your screen).

[root@nglinux pkg2]# fg %1
rpm -qa | xargs yumdownloader
supertux-0.3.4-1.el6.i686.rpm                                                               |  65 MB     05:03     
texlive-dvips-2007-60.el6_7.i686.rpm                                                        | 185 kB     00:02     

So its quite easy to stop and then resume the jobs in Linux.

However there is a concern here, if you logout from your current session, or the parent process of above process gets killed, it will also be flushed from memory.

So for such processes, we need to make sure to start the process in background to keep it alive.

Trick to keep the process running

[root@nglinux ~]# rpm -qa | xargs yumdownloader &
[1] 20836
[root@nglinux ~]#

Now you will say how to pause it ? and how to resume it in future ?

So the professional way of doing so is to use Kill arguments.

II. Stopping and Resuming background Jobs or processes using kill command

To do this, we can use Kill command signal SIGSTOP to change the process state from running to stop.

[root@nglinux kickstart_cd]# kill -SIGSTOP 20836 20837

Now if you look at the process state, it is changed to stop state i.e. T.

[root@nglinux kickstart_cd]# ps aux | grep -i yum | more
root     20836  0.0  0.0   4344   564 pts/1    T    00:12   0:00 xargs yumdownloader
root     20837 51.7  7.0 120368 72840 pts/1    T    00:12   0:37 /usr/bin/python /usr/bin/yumdownloader

Now suppose after the activity maybe after few hours, you can continue the stopped jobs using below command.

[root@nglinux kickstart_cd]# kill -SIGCONT 20836 20837

We can verify the same, using the ps command. Now the state is changed to sleeping and running for child process.

[root@nglinux kickstart_cd]# ps aux | grep -i yum | more
root     20836  0.0  0.0   4344   564 pts/1    S    00:12   0:00 xargs yumdownloader
root     20837 32.6  7.0 120368 72840 pts/1    R    00:12   0:40 /usr/bin/python /usr/bin/yumdownloader 

So from now onwards use the interesting capability of Linux system to stop the processes and then continue further.

I hope you liked the article. Subscribe to this blog to stay updated.

Leave a Reply

Notify of