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

Jenkins self-restart causes process name to change from java to exe

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Component/s: core
    • Labels:
      None
    • Environment:
      Ubuntu Linux 10.04

      Description

      When jenkins restarts itself (for instance after plugin updates) the process name changes from java to exe. This means that the /etc/init.d/jenkins stop script then fails to find the main jenkins program and also it complicates process monitoring (nagios etc.).

      I have observed this on a number of Jenkins/Hudson versions but have only just got around to investigating now. I think I've got a good handle on what is going on (and a suggested fix - although no patch).

      In normal operation (without builds in progress) I can see two jenkins processes "daemon" and "java". pgrep finds those too.

      richm@royalcounty:~$ ps -ef | grep jenkins
      jenkins 9782 1 0 13:29 ? 00:00:00 /usr/bin/daemon --name=jenkins --inherit --env=JENKINS_HOME=/var/lib/jenkins --output=/var/log/jenkins/jenkins.log --pidfile=/var/run/jenkins/jenkins.pid – /usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/run/jenkins/war --httpPort=8082 --ajp13Port=-1
      jenkins 9783 9782 99 13:29 ? 00:00:08 /usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/run/jenkins/war --httpPort=8082 --ajp13Port=-1
      richm 10340 21318 0 13:29 pts/0 00:00:00 grep jenkins
      richm@royalcounty:~$ pgrep -u jenkins java
      9783
      richm@royalcounty:~$ pgrep -u jenkins exe
      richm@royalcounty:~$

      Now if I force jenkins to restart itself (for instance by upgrading a plugin) I still see jenkins with the same process id but a pgrep finds it with a new name of exe

      richm@royalcounty:~$ ps -ef | grep jenkins
      jenkins 9782 1 0 13:29 ? 00:00:00 /usr/bin/daemon --name=jenkins --inherit --env=JENKINS_HOME=/var/lib/jenkins --output=/var/log/jenkins/jenkins.log --pidfile=/var/run/jenkins/jenkins.pid – /usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/run/jenkins/war --httpPort=8082 --ajp13Port=-1
      jenkins 9783 9782 99 13:39 ? 00:00:54 /usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/run/jenkins/war --httpPort=8082 --ajp13Port=-1
      richm 26138 21318 0 13:39 pts/0 00:00:00 grep jenkins
      richm@royalcounty:~$ pgrep -u jenkins java
      richm@royalcounty:~$ pgrep -u jenkins exe
      9783
      richm@royalcounty:~$

      I am pretty sure that the problem lies in UnixLifecycle.java in the call to LIBC.execv

      // exec to self
      LIBC.execv(
      Daemon.getCurrentExecutable(),
      new StringArray(args.toArray(new String[args.size()])));

      The Daemon.getCurrentExecutable() call returns

      String name = "/proc/" + pid + "/exe";

      On linux this is a symbolic link to the real executable java. If the /exe name is used in execv that sets the process name to be exe. Really the execv call should be performed using the target of the symbolic link and that would keep the name found by pgrep as being java.

      richm@royalcounty:~$ sudo ls -l /proc/9783/exe
      lrwxrwxrwx 1 jenkins nogroup 0 2011-03-31 13:39 /proc/9783/exe -> /usr/lib/jvm/java-6-openjdk/jre/bin/java

      Note that this also breaks the /etc/init.d/jenkins stop command because it is no longer able to find the java process owned by user jenkins.

      It isn't clear to me whether the correct fix would lie in the Daemon class (from akuma-1.4.jar) or whether it would be appropriate to lookup the symlink in UnixLifecycle itself.

        Activity

        Hide
        scm_issue_link SCM/JIRA link daemon added a comment -

        Code changed in jenkins
        User: Kohsuke Kawaguchi
        Path:
        changelog.html
        core/pom.xml
        war/pom.xml
        http://jenkins-ci.org/commit/jenkins/0ef9424d177d1e940112fab0ab15d799f199147d
        Log:
        [FIXED JENKINS-9206] resolve symlink to the executable name

        Show
        scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Kohsuke Kawaguchi Path: changelog.html core/pom.xml war/pom.xml http://jenkins-ci.org/commit/jenkins/0ef9424d177d1e940112fab0ab15d799f199147d Log: [FIXED JENKINS-9206] resolve symlink to the executable name
        Hide
        scm_issue_link SCM/JIRA link daemon added a comment -

        Code changed in jenkins
        User: Kohsuke Kawaguchi
        Path:
        changelog.html
        core/pom.xml
        war/pom.xml
        http://jenkins-ci.org/commit/jenkins/732accc472a5f5d45aef44f0c59e2bea9526200a
        Log:
        Revert "[FIXED JENKINS-9206] resolve symlink to the executable name"

        This reverts commit 0ef9424d177d1e940112fab0ab15d799f199147d.

        Show
        scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Kohsuke Kawaguchi Path: changelog.html core/pom.xml war/pom.xml http://jenkins-ci.org/commit/jenkins/732accc472a5f5d45aef44f0c59e2bea9526200a Log: Revert " [FIXED JENKINS-9206] resolve symlink to the executable name" This reverts commit 0ef9424d177d1e940112fab0ab15d799f199147d.
        Hide
        scm_issue_link SCM/JIRA link daemon added a comment -

        Code changed in jenkins
        User: Kohsuke Kawaguchi
        Path:
        changelog.html
        core/pom.xml
        war/pom.xml
        http://jenkins-ci.org/commit/jenkins/0ef9424d177d1e940112fab0ab15d799f199147d
        Log:
        [FIXED JENKINS-9206] resolve symlink to the executable name

        Show
        scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Kohsuke Kawaguchi Path: changelog.html core/pom.xml war/pom.xml http://jenkins-ci.org/commit/jenkins/0ef9424d177d1e940112fab0ab15d799f199147d Log: [FIXED JENKINS-9206] resolve symlink to the executable name
        Hide
        scm_issue_link SCM/JIRA link daemon added a comment -

        Code changed in jenkins
        User: Kohsuke Kawaguchi
        Path:
        changelog.html
        core/pom.xml
        war/pom.xml
        http://jenkins-ci.org/commit/jenkins/732accc472a5f5d45aef44f0c59e2bea9526200a
        Log:
        Revert "[FIXED JENKINS-9206] resolve symlink to the executable name"

        This reverts commit 0ef9424d177d1e940112fab0ab15d799f199147d.

        Show
        scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Kohsuke Kawaguchi Path: changelog.html core/pom.xml war/pom.xml http://jenkins-ci.org/commit/jenkins/732accc472a5f5d45aef44f0c59e2bea9526200a Log: Revert " [FIXED JENKINS-9206] resolve symlink to the executable name" This reverts commit 0ef9424d177d1e940112fab0ab15d799f199147d.
        Hide
        scm_issue_link SCM/JIRA link daemon added a comment -

        Code changed in jenkins
        User: Kohsuke Kawaguchi
        Path:
        changelog.html
        core/pom.xml
        war/pom.xml
        http://jenkins-ci.org/commit/jenkins/448634c9772e9b69d6666736acc673d7a6d8f5a6
        Log:
        [FIXED JENKINS-9206] resolve symlink to the executable name

        Show
        scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Kohsuke Kawaguchi Path: changelog.html core/pom.xml war/pom.xml http://jenkins-ci.org/commit/jenkins/448634c9772e9b69d6666736acc673d7a6d8f5a6 Log: [FIXED JENKINS-9206] resolve symlink to the executable name

          People

          • Assignee:
            oldelvet Richard Mortimer
            Reporter:
            oldelvet Richard Mortimer
          • Votes:
            1 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: