2

What is the best way to start child processso that when the parent process is terminated, the child process will also get terminated.

I can see my process as a tree:

    1 26152 26150 26150 ?           -1 Sl    1000   0:00 /usr/bin/perl /usr/local/bin/disp
26152 26171 26150 26150 ?           -1 S     1000   0:00  \_ /bin/bash /var/tmp/job_500
26171 26172 26150 26150 ?           -1 S     1000   0:00  |   \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_500 600
26152 26174 26150 26150 ?           -1 S     1000   0:00  \_ /bin/bash /var/tmp/job_1000
26174 26175 26150 26150 ?           -1 S     1000   0:00  |   \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_1000 600
26152 26177 26150 26150 ?           -1 S     1000   0:00  \_ /bin/bash /var/tmp/job_2000
26177 26178 26150 26150 ?           -1 S     1000   0:00  |   \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_2000 600
26152 26181 26150 26150 ?           -1 S     1000   0:00  \_ /bin/bash /var/tmp/job_5000
26181 26186 26150 26150 ?           -1 S     1000   0:00  |   \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_5000 600
26152 26189 26150 26150 ?           -1 S     1000   0:00  \_ /bin/bash /var/tmp/job_15000
26189 26190 26150 26150 ?           -1 S     1000   0:00  |   \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_15000 600
26152 26195 26150 26150 ?           -1 S     1000   0:00  \_ /bin/bash /var/tmp/job_30000
26195 26197 26150 26150 ?           -1 S     1000   0:00  |   \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_30000 600
26152 26198 26150 26150 ?           -1 S     1000   0:00  \_ /bin/bash /var/tmp/job_60000
26198 26201 26150 26150 ?           -1 S     1000   0:00  |   \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_60000 28800
26152 26213 26150 26150 ?           -1 S     1000   0:00  \_ /bin/bash /var/tmp/job_900000
26213 26217 26150 26150 ?           -1 S     1000   0:00  |   \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_900000 86400
26152 26219 26150 26150 ?           -1 S     1000   0:00  \_ /bin/bash /var/tmp/job_3600000
26219 26225 26150 26150 ?           -1 S     1000   0:00  |   \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_3600000 86400
26152 26233 26150 26150 ?           -1 S     1000   0:00  \_ /bin/bash /var/tmp/job_86400000
26233 26235 26150 26150 ?           -1 S     1000   0:00      \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_86400000 86400

but when I kill the parent process (kill -9 26152) its not deleting the child processes. Instead, child process parent's process parent is becoming the parent

    1 26171 26150 26150 ?           -1 S     1000   0:00 /bin/bash /var/tmp/job_500
26171 26172 26150 26150 ?           -1 S     1000   0:00  \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_500 600
    1 26174 26150 26150 ?           -1 S     1000   0:00 /bin/bash /var/tmp/job_1000
26174 26175 26150 26150 ?           -1 S     1000   0:00  \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_1000 600
    1 26177 26150 26150 ?           -1 S     1000   0:00 /bin/bash /var/tmp/job_2000
26177 26178 26150 26150 ?           -1 S     1000   0:00  \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_2000 600
    1 26181 26150 26150 ?           -1 S     1000   0:00 /bin/bash /var/tmp/job_5000
26181 26186 26150 26150 ?           -1 S     1000   0:00  \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_5000 600
    1 26189 26150 26150 ?           -1 S     1000   0:00 /bin/bash /var/tmp/job_15000
26189 26190 26150 26150 ?           -1 S     1000   0:00  \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_15000 600
    1 26195 26150 26150 ?           -1 S     1000   0:00 /bin/bash /var/tmp/job_30000
26195 26197 26150 26150 ?           -1 S     1000   0:00  \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_30000 600
    1 26198 26150 26150 ?           -1 S     1000   0:00 /bin/bash /var/tmp/job_60000
26198 26201 26150 26150 ?           -1 S     1000   0:00  \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_60000 28800
    1 26213 26150 26150 ?           -1 S     1000   0:00 /bin/bash /var/tmp/job_900000
26213 26217 26150 26150 ?           -1 S     1000   0:00  \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_900000 86400
    1 26219 26150 26150 ?           -1 S     1000   0:00 /bin/bash /var/tmp/job_3600000
26219 26225 26150 26150 ?           -1 S     1000   0:00  \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_3600000 86400
    1 26233 26150 26150 ?           -1 S     1000   0:00 /bin/bash /var/tmp/job_86400000
26233 26235 26150 26150 ?           -1 S     1000   0:00  \_ /usr/bin/perl /usr/local/bin/qrun /var/tmp/ml_86400000 86400

Kindly help me. Am I doing something wrong, or do I need to make some change while starting the process?

amon
  • 57,091
  • 2
  • 89
  • 149
sharad-garg
  • 359
  • 1
  • 6
  • 12

1 Answers1

3

You can tell parent to send HUP signal to process groups,

use sigtrap qw(die normal-signals);
END {
  kill('HUP', -$$);
}

From perldoc -f kill

The behavior of kill when a PROCESS number is zero or negative depends on the operating system. For example, on POSIX-conforming systems, zero will signal the current process group, -1 will signal all processes, and any other negative PROCESS number will act as a negative signal number and kill the entire process group specified.

mpapec
  • 50,217
  • 8
  • 67
  • 127
  • You may also try `kill -1 PID` as `-9` is reserved only as a last resort, and can leave children alive. – mpapec Apr 13 '14 at 08:51