{"type":"rich","version":"1.0","provider_name":"phorkie","provider_url":"https:\/\/p.cweiske.de\/","title":"kill zombies with gdb and wait-for-child","author_name":"Christian Weiske","cache_age":86400,"width":900,"height":900,"html":"<!-- embedding all files of https:\/\/p.cweiske.de\/425 -->\n<link rel=\"stylesheet\" href=\"https:\/\/p.cweiske.de\/css\/embed.css\"\/>\n<div class=\"phork\" id=\"425\">\n    <div class=\"phork-file\">\n <div class=\"phork-content\">\n  \n<div class=\"document\">\n\n\n<p>Taken from <a class=\"reference external\" href=\"http:\/\/xmodulo.com\/how-to-find-and-kill-zombie-processes.html\">http:\/\/xmodulo.com\/how-to-find-and-kill-zombie-processes.html<\/a><\/p>\n<\/div>\n\n <\/div>\n <div class=\"phork-meta\">\n  <a href=\"https:\/\/p.cweiske.de\/425\/rev-raw\/94601e4a956422697925cfa58b8e4d57bc74d143\/README.rst\" style=\"float: right\">view raw source<\/a>\n  <a href=\"https:\/\/p.cweiske.de\/425#README.rst\">README.rst<\/a>\n <\/div>\n<\/div>\n    <div class=\"phork-file\">\n <div class=\"phork-content\">\n  <style type=\"text\/css\">\/**\n * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\n * (http:\/\/qbnz.com\/highlighter\/ and http:\/\/geshi.org\/)\n *\/\n.bash .de1, .bash .de2 {font: normal normal 1em\/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}\n.bash  {font-family:monospace;}\n.bash .imp {font-weight: bold; color: red;}\n.bash li, .bash .li1 {color: #DDD;}\n.bash .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}\n.bash .kw1 {color: #000000; font-weight: bold;}\n.bash .kw2 {color: #c20cb9; font-weight: bold;}\n.bash .kw3 {color: #7a0874; font-weight: bold;}\n.bash .co0 {color: #666666; font-style: italic;}\n.bash .co1 {color: #800000;}\n.bash .co2 {color: #cc0000; font-style: italic;}\n.bash .co3 {color: #000000; font-weight: bold;}\n.bash .es1 {color: #000099; font-weight: bold;}\n.bash .es2 {color: #007800;}\n.bash .es3 {color: #007800;}\n.bash .es4 {color: #007800;}\n.bash .es5 {color: #780078;}\n.bash .es_h {color: #000099; font-weight: bold;}\n.bash .br0 {color: #7a0874; font-weight: bold;}\n.bash .sy0 {color: #000000; font-weight: bold;}\n.bash .st0 {color: #ff0000;}\n.bash .st_h {color: #ff0000;}\n.bash .nu0 {color: #000000;}\n.bash .re0 {color: #007800;}\n.bash .re1 {color: #007800;}\n.bash .re2 {color: #007800;}\n.bash .re4 {color: #007800;}\n.bash .re5 {color: #660033;}\n.bash span.xtra { display:block; }\n<\/style><div class=\"code\"><table class=\"bash\"><tbody><tr class=\"li1\"><td class=\"ln\"><pre class=\"de1\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n<\/pre><\/td><td class=\"de1\"><pre class=\"de1\"><span class=\"co0\">#!\/bin\/bash<\/span>\n<span class=\"co0\">##################################################################<\/span>\n<span class=\"co0\"># Script: Zombie Slayer<\/span>\n<span class=\"co0\"># Author: Mitch Milner<\/span>\n<span class=\"co0\"># Date: 03\/13\/2013 ---&gt; A good day to slay zombies<\/span>\n<span class=\"co0\">#<\/span>\n<span class=\"co0\"># Requirements: yum install gdb<\/span>\n<span class=\"co0\"># permissions to attach to the parent process<\/span>\n<span class=\"co0\">#<\/span>\n<span class=\"co0\"># This script works by using a debugger to<\/span>\n<span class=\"co0\"># attach to the parent process and then issuing<\/span>\n<span class=\"co0\"># a waitpid to the dead zombie. This will not kill<\/span>\n<span class=\"co0\"># the living parent process.<\/span>\n<span class=\"co0\">##################################################################<\/span>\n&#160;\n<span class=\"kw2\">clear<\/span>\n<span class=\"co0\"># Wait for user input to proceed, give user a chance to cancel script<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;***********************************************************&quot;<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"re5\">-e<\/span> <span class=\"st0\">&quot;This script will terminate all zombie process.&quot;<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"re5\">-e<\/span> <span class=\"st0\">&quot;Press [ENTER] to continue or [CTRL] + C to cancel:&quot;<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;***********************************************************&quot;<\/span>\n<span class=\"kw2\">read<\/span> cmd_string\n<span class=\"kw3\">echo<\/span> <span class=\"re5\">-e<\/span> <span class=\"st0\">&quot;<span class=\"es1\">\\n<\/span>&quot;<\/span>\n&#160;\n<span class=\"co0\"># initialize variables<\/span>\n<span class=\"re2\">intcount<\/span>=<span class=\"nu0\">0<\/span>\n<span class=\"re2\">lastparentid<\/span>=<span class=\"nu0\">0<\/span>\n&#160;\n<span class=\"co0\"># remove old gdb command file<\/span>\n<span class=\"kw2\">rm<\/span> <span class=\"re5\">-f<\/span> <span class=\"sy0\">\/<\/span>tmp<span class=\"sy0\">\/<\/span>zombie_slayer.txt\n&#160;\n<span class=\"co0\"># create the gdb command file<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;***********************************************************&quot;<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;Creating command file...&quot;<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;***********************************************************&quot;<\/span>\n<span class=\"kw2\">ps<\/span> <span class=\"re5\">-e<\/span> <span class=\"re5\">-o<\/span> ppid,pid,<span class=\"kw2\">stat<\/span>,<span class=\"kw3\">command<\/span> <span class=\"sy0\">|<\/span> <span class=\"kw2\">grep<\/span> Z <span class=\"sy0\">|<\/span> <span class=\"kw2\">sort<\/span> <span class=\"sy0\">|<\/span> <span class=\"kw1\">while<\/span> <span class=\"kw2\">read<\/span> LINE; <span class=\"kw1\">do<\/span>\n<span class=\"re2\">intcount<\/span>=$<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>intcount+<span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>\n<span class=\"re2\">parentid<\/span>=<span class=\"sy0\">`<\/span><span class=\"kw3\">echo<\/span> <span class=\"re1\">$LINE<\/span> <span class=\"sy0\">|<\/span> <span class=\"kw2\">awk<\/span> <span class=\"st_h\">'{print $1}'<\/span><span class=\"sy0\">`<\/span>\n<span class=\"re2\">zombieid<\/span>=<span class=\"sy0\">`<\/span><span class=\"kw3\">echo<\/span> <span class=\"re1\">$LINE<\/span> <span class=\"sy0\">|<\/span> <span class=\"kw2\">awk<\/span> <span class=\"st_h\">'{print $2}'<\/span><span class=\"sy0\">`<\/span>\n<span class=\"re2\">verifyzombie<\/span>=<span class=\"sy0\">`<\/span><span class=\"kw3\">echo<\/span> <span class=\"re1\">$LINE<\/span> <span class=\"sy0\">|<\/span> <span class=\"kw2\">awk<\/span> <span class=\"st_h\">'{print $3}'<\/span><span class=\"sy0\">`<\/span>\n&#160;\n<span class=\"co0\"># make sure this is a zombie file and we are not getting a Z from<\/span>\n<span class=\"co0\"># the command field of the ps -e -o ppid,pid,stat,command<\/span>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#91;<\/span> <span class=\"st0\">&quot;<span class=\"es2\">$verifyzombie<\/span>&quot;<\/span> == <span class=\"st0\">&quot;Z&quot;<\/span> <span class=\"br0\">&#93;<\/span>\n<span class=\"kw1\">then<\/span>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#91;<\/span> <span class=\"st0\">&quot;<span class=\"es2\">$parentid<\/span>&quot;<\/span> <span class=\"sy0\">!<\/span>= <span class=\"st0\">&quot;<span class=\"es2\">$lastparentid<\/span>&quot;<\/span> <span class=\"br0\">&#93;<\/span>\n<span class=\"kw1\">then<\/span>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#91;<\/span> <span class=\"st0\">&quot;<span class=\"es2\">$lastparentid<\/span>&quot;<\/span> <span class=\"sy0\">!<\/span>= <span class=\"st0\">&quot;0&quot;<\/span> <span class=\"br0\">&#93;<\/span>\n<span class=\"kw1\">then<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;detach&quot;<\/span> <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"sy0\">\/<\/span>tmp<span class=\"sy0\">\/<\/span>zombie_slayer.txt\n<span class=\"kw1\">fi<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;attach <span class=\"es2\">$parentid<\/span>&quot;<\/span> <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"sy0\">\/<\/span>tmp<span class=\"sy0\">\/<\/span>zombie_slayer.txt\n<span class=\"kw1\">fi<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;call waitpid (<span class=\"es2\">$zombieid<\/span>,0,0)&quot;<\/span> <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"sy0\">\/<\/span>tmp<span class=\"sy0\">\/<\/span>zombie_slayer.txt\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;Logging: Parent: <span class=\"es2\">$parentid<\/span> Zombie: <span class=\"es2\">$zombieid<\/span>&quot;<\/span>\n<span class=\"re2\">lastparentid<\/span>=<span class=\"re1\">$parentid<\/span>\n<span class=\"kw1\">fi<\/span>\n<span class=\"kw1\">done<\/span>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#91;<\/span> <span class=\"st0\">&quot;<span class=\"es2\">$lastparentid<\/span>&quot;<\/span> <span class=\"sy0\">!<\/span>= <span class=\"st0\">&quot;0&quot;<\/span> <span class=\"br0\">&#93;<\/span>\n<span class=\"kw1\">then<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;detach&quot;<\/span> <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"sy0\">\/<\/span>tmp<span class=\"sy0\">\/<\/span>zombie_slayer.txt\n<span class=\"kw1\">fi<\/span>\n&#160;\n<span class=\"co0\"># Slay the zombies with gdb and the created command file<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"re5\">-e<\/span> <span class=\"st0\">&quot;<span class=\"es1\">\\n<\/span><span class=\"es1\">\\n<\/span>&quot;<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;***********************************************************&quot;<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;Slaying zombie processes...&quot;<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;***********************************************************&quot;<\/span>\n<span class=\"kw2\">gdb<\/span> <span class=\"re5\">-batch<\/span> <span class=\"re5\">-x<\/span> <span class=\"sy0\">\/<\/span>tmp<span class=\"sy0\">\/<\/span>zombie_slayer.txt\n<span class=\"kw3\">echo<\/span> <span class=\"re5\">-e<\/span> <span class=\"st0\">&quot;<span class=\"es1\">\\n<\/span><span class=\"es1\">\\n<\/span>&quot;<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;***********************************************************&quot;<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;Script complete.&quot;<\/span>\n<span class=\"kw3\">echo<\/span> <span class=\"st0\">&quot;***********************************************************&quot;<\/span>\n&#160;<\/pre><\/td><\/tr><\/tbody><\/table><\/div>\n <\/div>\n <div class=\"phork-meta\">\n  <a href=\"https:\/\/p.cweiske.de\/425\/rev-raw\/94601e4a956422697925cfa58b8e4d57bc74d143\/zombieslayer.sh\" style=\"float: right\">view raw source<\/a>\n  <a href=\"https:\/\/p.cweiske.de\/425#zombieslayer.sh\">zombieslayer.sh<\/a>\n <\/div>\n<\/div>\n<\/div>\n"}
