Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-3105

Configuration UI to disable process tree killer selectively

    Details

    • Type: Improvement
    • Status: Open (View Workflow)
    • Priority: Trivial
    • Resolution: Unresolved
    • Component/s: core
    • Labels:
      None
    • Environment:
      Platform: Sun, OS: Solaris
    • Similar Issues:

      Description

      Due to fix https://hudson.dev.java.net/issues/show_bug.cgi?id=2729, I can't
      restart my tomcat instance with using a script which worked fine before 1.283.
      My script called fastRestart.sh is :
      PWD=`pwd`
      cd $PWD
      #BUILD_ID="dontKillMe catalina.sh start"
      #BUILD_ID="dontKillMe ./startup.sh"
      echo $BUILD_ID
      kill -9 `cat ./tomcat.pid` && ./startup.sh

      My hudson job do :
      BUILD_ID=dontKillMe startup.sh && cd
      /local/dotw/tomcat-dev-ota-ah/apache-tomcat-6.0.14/bin && ./fastRestart.sh

      job console output :
      started
      [workspace] $ /bin/sh -xe
      /local/dotw/tmp/hudson-tmp/hudson3776950102996593394.sh
      BUILD_ID=dontKillMe startup.sh
      + cd /local/dotw/tomcat-dev-ota-ah/apache-tomcat-6.0.14/bin
      + ./fastRestart.sh
      + pwd
      PWD=/local/dotw/tomcat-dev-ota-ah/apache-tomcat-6.0.14/bin
      + cd /local/dotw/tomcat-dev-ota-ah/apache-tomcat-6.0.14/bin
      + echo dontKillMe startup.sh
      dontKillMe startup.sh
      + cat ./tomcat.pid
      + kill -9 9822
      + ./startup.sh
      finished: SUCCESS

      Here the tomcat has been killed and restarted but immediatly stop due to fix for
      2729.
      Is there any other workaround ?
      IMHO we should have a flag when running a script which "don't kill child
      processes" (to preserve a minimum of backward compatibility and a minimum of
      some jobs/scripts rewriting)

      Thanks

      Olivier

        Attachments

          Issue Links

            Activity

            Hide
            fnx Neil Bird added a comment -

            As it seems vaguely appropriate, I shall repeat here for interested parties what I've just commented on issue #9104 :

            Visual Studio is so ubiquitous that I personally think this could warrant a special case built into Jenkins, but anyway this is what we have just started doing (before calling devenv but after the MSC setup.bat has been called) to work around this (for all Windows builds):

            :: PITA to keep MSPDBSRV alive
            set ORIG_BUILD_ID=%BUILD_ID%
            set BUILD_ID=DoNotKillMe
            start mspdbsrv -start -spawn
            set BUILD_ID=%ORIG_BUILD_ID%
            set ORIG_BUILD_ID=

            It seems, from reading around, that the Jenkins process “tree” killer rummages through the whole process tree looking for processes with the environment variable BUILD_ID set to what Jenkins originally set it to, and killing any it finds. The above temporarily changes that to something else (anything, you could even just blank it), launches mspdbsrv manually (so it has the altered env. var.) and then puts it back (to restore the usual no-resource-leak fix).

            When you run mspdbsrv, it seems to immediately exit if there's already an appropriate version running, so it doesn't matter having multiple jobs trying to kick it off.

            Show
            fnx Neil Bird added a comment - As it seems vaguely appropriate, I shall repeat here for interested parties what I've just commented on issue #9104 : Visual Studio is so ubiquitous that I personally think this could warrant a special case built into Jenkins, but anyway this is what we have just started doing (before calling devenv but after the MSC setup.bat has been called) to work around this (for all Windows builds): :: PITA to keep MSPDBSRV alive set ORIG_BUILD_ID=%BUILD_ID% set BUILD_ID=DoNotKillMe start mspdbsrv -start -spawn set BUILD_ID=%ORIG_BUILD_ID% set ORIG_BUILD_ID= It seems, from reading around, that the Jenkins process “tree” killer rummages through the whole process tree looking for processes with the environment variable BUILD_ID set to what Jenkins originally set it to, and killing any it finds. The above temporarily changes that to something else (anything, you could even just blank it), launches mspdbsrv manually (so it has the altered env. var.) and then puts it back (to restore the usual no-resource-leak fix). When you run mspdbsrv, it seems to immediately exit if there's already an appropriate version running, so it doesn't matter having multiple jobs trying to kick it off.
            Hide
            oleg_nenashev Oleg Nenashev added a comment -

            The issue stills actual

            Show
            oleg_nenashev Oleg Nenashev added a comment - The issue stills actual
            Hide
            martinus Martin Ankerl added a comment - - edited

            Shorter version of the batch:

            cmd /c "set BUILD_ID=DoNotKill && start mspdbsrv -start -spawn -shutdowntime 2147483647"
            

            Update: Add -shutdowntime, see https://issues.jenkins-ci.org/browse/JENKINS-9104?focusedCommentId=162154&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-162154

            Show
            martinus Martin Ankerl added a comment - - edited Shorter version of the batch: cmd /c "set BUILD_ID=DoNotKill && start mspdbsrv -start -spawn -shutdowntime 2147483647" Update: Add -shutdowntime, see https://issues.jenkins-ci.org/browse/JENKINS-9104?focusedCommentId=162154&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-162154
            Hide
            alexey_larsky Alexey Larsky added a comment -

            I've try to use 'set BUILD_ID=DoNotKill && start mspdbsrv -start -spawn -shutdowntime 2147483647', but msbuild always starts your own instance of mspdbsrv with your BUILD_ID and kill it on finish build.

            Since Jenkins v 1.580.3 glovbal environment settings has been changed and for general node-wide disabling process killing you should add global environment variable 'BUILD_ID' with any value i.e. 'DoNotKill' and additional check 'Prepare jobs environment' checkbox. I don't found way to disable just mspdbsrv killing.

            Show
            alexey_larsky Alexey Larsky added a comment - I've try to use 'set BUILD_ID=DoNotKill && start mspdbsrv -start -spawn -shutdowntime 2147483647', but msbuild always starts your own instance of mspdbsrv with your BUILD_ID and kill it on finish build. Since Jenkins v 1.580.3 glovbal environment settings has been changed and for general node-wide disabling process killing you should add global environment variable 'BUILD_ID' with any value i.e. 'DoNotKill' and additional check 'Prepare jobs environment' checkbox. I don't found way to disable just mspdbsrv killing.
            Hide
            alexey_larsky Alexey Larsky added a comment -

            I really wonder why this issue priority is 'Trivial'. For me it's major.

            Show
            alexey_larsky Alexey Larsky added a comment - I really wonder why this issue priority is 'Trivial'. For me it's major.

              People

              • Assignee:
                Unassigned
                Reporter:
                olamy Olivier Lamy
              • Votes:
                13 Vote for this issue
                Watchers:
                15 Start watching this issue

                Dates

                • Created:
                  Updated: