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

ProcessTreeKiller broken for Windows when node went offline/online

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: Critical Critical
    • core
    • Jenkins 1.625.1 LTS
      Window7,Window8,Window10 node
      JDK 1.7

      1) Choose a Windows7/8/10 node and mark it offline in its configuration page
      2) then mark it online
      3) Create a job attached to this node with the Windows command: notepad.exe
      4) Start your job, check that Notepad is started (dont close).
      5) Cancel the build of the job and see that Notepad is still open.

      On the windows node, if you manually restart the agent, this fixes the "kill behavior".

      the problem also happens for an accidental deconnection/reconnection (that how we notificed that, because randomly it seems that the ProcessTreeKiller did not work anymore and it seemed that it happened after networks issues between the server and the node)

          [JENKINS-31706] ProcessTreeKiller broken for Windows when node went offline/online

          Error reproduced :

          Slave agent is launch by a script containing such command : javaws http://localhost:8080/jenkins/computer/NODE/slave-agent.jnlp
          Job consists in a Windows Batch command : notepad.exe.

          Analysis :
          When disconnecting node using the jenkins UI, the slave-agent is set disconnected and then it restarts.
          The submitting a new job and cancelling it with the UI causes an Error in Class hudson.util.ProcessTree method "public static ProcessTree get()" @line:355
          java.lang.UnsatisfiedLinkError: Native Library C:\Users\<user_name>\.jenkins\cache\jars\4A\winp.x64.22D9AB310A3FA2D96B6E03A836A47724.dll already loaded in another classloader
          When this Error is catched, ProcessTreeKiller enable static attribute is set to false, then DEFAULT ProcessTree imlementation is used, where killAll is no-op. So only ProcessRuntime running the cmd command is destroyed and only cmd process is killed (which doesn't kill the subprocesses)

          Pierre-Henri Cazes added a comment - Error reproduced : Slave agent is launch by a script containing such command : javaws http://localhost:8080/jenkins/computer/NODE/slave-agent.jnlp Job consists in a Windows Batch command : notepad.exe. Analysis : When disconnecting node using the jenkins UI, the slave-agent is set disconnected and then it restarts. The submitting a new job and cancelling it with the UI causes an Error in Class hudson.util.ProcessTree method "public static ProcessTree get()" @line:355 java.lang.UnsatisfiedLinkError: Native Library C:\Users\<user_name>\.jenkins\cache\jars\4A\winp.x64.22D9AB310A3FA2D96B6E03A836A47724.dll already loaded in another classloader When this Error is catched, ProcessTreeKiller enable static attribute is set to false, then DEFAULT ProcessTree imlementation is used, where killAll is no-op. So only ProcessRuntime running the cmd command is destroyed and only cmd process is killed (which doesn't kill the subprocesses)

          Oleg Nenashev added a comment -

          Merging the issue into JENKINS-24319

          Oleg Nenashev added a comment - Merging the issue into JENKINS-24319

            Unassigned Unassigned
            sgalles Stephane Gallès
            Votes:
            2 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: