{"id":204,"date":"2008-02-05T20:35:32","date_gmt":"2008-02-05T20:35:32","guid":{"rendered":"https:\/\/kari.world.ikari.fi\/2008\/02\/05\/pid-of-java-process\/"},"modified":"2008-02-05T20:35:32","modified_gmt":"2008-02-05T20:35:32","slug":"pid-of-java-process","status":"publish","type":"post","link":"https:\/\/kari.world.ikari.fi\/?p=204","title":{"rendered":"PID of java process"},"content":{"rendered":"<p>For some reason &#8221;getPid()&#8221; Bug Parade entry has been hanging for ever &#8221;in progress, won&#8217;t ever fix&#8221; state.<\/p>\n<p>However, after quick searching there is workaround, which hopefully works in &#8221;major&#8221; cases (meaning Linux, M$windows and OSX).<\/p>\n<p>NOTE: Tested logic only in Linux box. However, since logic relies into public API, it should be working in other OS also.<\/p>\n<p>[code lang=&#8221;java&#8221;]<br \/>\n\/**<br \/>\n * Get current process PID<br \/>\n *<br \/>\n * @return pid, -1 if resolving failed<br \/>\n *\/<br \/>\npublic static int getPID() {<br \/>\n    int pid = -1;<br \/>\n    try {<br \/>\n        RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();<br \/>\n        String id = runtime.getName();<br \/>\n        int idx = id.indexOf(&#8217;@&#8217;);<br \/>\n        if (idx != -1) {<br \/>\n            id = id.substring(0, idx);<br \/>\n        }<br \/>\n        pid = Integer.parseInt(id);<br \/>\n    } catch (Exception e) {<br \/>\n        LOG.warn(&#8221;Failed to resolve PID&#8221;, e);<br \/>\n    }<br \/>\n    return pid;<br \/>\n}<br \/>\n[\/code]<\/p>\n<p>So we get current process PID. Next question is what we could do with such information.<\/p>\n<p>And here comes one answer&#8230;<\/p>\n<p>We could, for example, include $JDK_HOME\/lib\/tools.jar into classpath of our application, and then perform following:<\/p>\n<p>[code lang=&#8221;java&#8221;]<br \/>\npublic static void dumpHeap(String pFilename) throws Exception {<br \/>\n    int pid = SystemUtil.getPID();<br \/>\n    String className = &#8221;sun.tools.jmap.JMap&#8221;;<br \/>\n    Class cls = Class.forName(className);<br \/>\n    Class[] paramTypes = {String[].class};<br \/>\n    String[] param = {<br \/>\n        &#8221;-dump:format=b,file=&#8221; + pFilename,<br \/>\n        &#8221;&#8221; + pid<br \/>\n    };<\/p>\n<p>    Method method = cls.getDeclaredMethod(&#8221;main&#8221;, pParamTypes);<br \/>\n    return method.invoke(null, new Object[]{param});<br \/>\n}<br \/>\n[\/code]<\/p>\n<p>This piece of code creates heap dump of current java process in HPROF format. Resulting dump can be then analyzed using <code>jhat<\/code> utility delivered with Sun JDK 6.<\/p>\n<p><b>References<\/b>:<\/p>\n<ul>\n<li><a href=\"http:\/\/bugs.sun.com\/bugdatabase\/view_bug.do?bug_id=4244896\">Bug ID: 4244896 (process) Provide System.getPid(), System.killProcess(String pid)<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>For some reason &#8221;getPid()&#8221; Bug Parade entry has been hanging for ever &#8221;in progress, won&#8217;t ever fix&#8221; state. However, after quick searching there is workaround, which hopefully works in &#8221;major&#8221; cases (meaning Linux, M$windows and OSX). NOTE: Tested logic only in Linux box. However, since logic relies into public API, it should be working in&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-204","post","type-post","status-publish","format-standard","hentry","category-java"],"_links":{"self":[{"href":"https:\/\/kari.world.ikari.fi\/index.php?rest_route=\/wp\/v2\/posts\/204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kari.world.ikari.fi\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kari.world.ikari.fi\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kari.world.ikari.fi\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kari.world.ikari.fi\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=204"}],"version-history":[{"count":0,"href":"https:\/\/kari.world.ikari.fi\/index.php?rest_route=\/wp\/v2\/posts\/204\/revisions"}],"wp:attachment":[{"href":"https:\/\/kari.world.ikari.fi\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kari.world.ikari.fi\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kari.world.ikari.fi\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}