Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jenkins kill all child processes

Tags:

jenkins

I have a jenkins job that runs a bash script.

In the bash script I perform effectively two actions, something like

java ApplicationA &
PID_A=$!
java ApplicationB
kill $PID_A   

but if the job is manually aborted, the ApplicationA remains alive (as can be seen with a ps -ef on the node machine). I cannot use trapping and so on, because that won't work if jenkins sends a 9 signal (trapping doesn't work for 9).

It would be ideal if this job could be configured to simply kill all processes that it spawns, how can I do that?

like image 289
fommil Avatar asked Aug 20 '14 10:08

fommil


1 Answers

Actually, by default, Jenkins has a feature called ProcessTreeKiller which is responsible to make sure there are no processes left running after the job execution.

The link above explain how to disable that feature. Are you sure you don't have that disabled by mistake somehow?

Edit:
Following the comments by the author, based on the information about disabling ProcessTreeKiller, to achieve the inverse one must set the environment variable BUILD_ID to the build id of Jenkins job. This way, when ProcessTreeKiller looks through the running processes to kill, it will find this as well

export BUILD_ID=$BUILD_ID

You can also use the Build Result Trigger plugin, configure a second job to clean up your applications, and configure it to monitor the first job for ABORTED state as a trigger.

like image 165
Slav Avatar answered Oct 10 '22 13:10

Slav