document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/pygment_trac.css" />');
document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/embed.css" />');
document.write('<div class="flowcoder_post flowcoder_clearfix">');
document.write('<div class="flowcoder_posttitle"><a href=\"http://flowcoder.com/152\">make a system call and then kill it if the timeout is reached<\/a></div>');
document.write('<div class="flowcoder_postbody flowcoder_syntax"><div class=\"highlight\"><pre><span class=\"nb\">require<\/span> <span class=\"s1\">&#39;timeout&#39;<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">System<\/span>\n <span class=\"k\">def<\/span> <span class=\"nc\">self<\/span><span class=\"o\">.<\/span><span class=\"nf\">system_with_timeout<\/span><span class=\"p\">(<\/span><span class=\"n\">timeout<\/span><span class=\"p\">,<\/span> <span class=\"o\">*<\/span><span class=\"n\">args<\/span><span class=\"p\">)<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span> <span class=\"p\">(<\/span><span class=\"n\">pid<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">fork<\/span><span class=\"p\">)<\/span> <span class=\"o\">==<\/span> <span class=\"kp\">nil<\/span> <span class=\"p\">)<\/span>\n    <span class=\"c1\">#child process<\/span>\n    <span class=\"vc\">@@logger<\/span><span class=\"o\">.<\/span><span class=\"n\">debug<\/span><span class=\"p\">(<\/span><span class=\"n\">args<\/span><span class=\"o\">.<\/span><span class=\"n\">join<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39; &#39;<\/span><span class=\"p\">))<\/span>\n    <span class=\"nb\">exec<\/span><span class=\"p\">(<\/span><span class=\"o\">*<\/span><span class=\"n\">args<\/span><span class=\"p\">)<\/span>\n  <span class=\"k\">else<\/span>\n    <span class=\"n\">success<\/span> <span class=\"o\">=<\/span> <span class=\"kp\">false<\/span>\n    <span class=\"c1\">#parent process<\/span>\n    <span class=\"k\">begin<\/span>\n      <span class=\"c1\">#TODO if the process fails return false<\/span>\n      <span class=\"n\">success<\/span> <span class=\"o\">=<\/span> <span class=\"no\">Timeout<\/span><span class=\"o\">::<\/span><span class=\"n\">timeout<\/span><span class=\"p\">(<\/span><span class=\"n\">timeout<\/span><span class=\"p\">){<\/span> <span class=\"no\">Process<\/span><span class=\"o\">.<\/span><span class=\"n\">waitpid<\/span><span class=\"p\">(<\/span><span class=\"n\">pid<\/span><span class=\"p\">)<\/span> <span class=\"p\">}<\/span>\n    <span class=\"k\">rescue<\/span> <span class=\"no\">Timeout<\/span><span class=\"o\">::<\/span><span class=\"no\">Error<\/span>\n      <span class=\"vc\">@@logger<\/span><span class=\"o\">.<\/span><span class=\"n\">error<\/span> <span class=\"s2\">&quot;***** Timeout error&quot;<\/span>\n      <span class=\"no\">Process<\/span><span class=\"o\">.<\/span><span class=\"n\">kill<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;HUP&quot;<\/span><span class=\"p\">,<\/span> <span class=\"n\">pid<\/span><span class=\"p\">)<\/span>\n      <span class=\"no\">Process<\/span><span class=\"o\">.<\/span><span class=\"n\">detach<\/span><span class=\"p\">(<\/span><span class=\"n\">pid<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">end<\/span>\n    <span class=\"n\">success<\/span>\n  <span class=\"k\">end<\/span>\n <span class=\"k\">end<\/span>\n<span class=\"k\">end<\/span>\n<\/pre><\/div>\n</div>');
document.write('<div class="flowcoder_bottombar flowcoder_clearfix">');
document.write('<div class="flowcoder_postedby">Posted by <a href=\"http://flowcoder.com/zh\">zh<\/a> on <a href=\"http://flowcoder.com/\">Flowcoder<\/a></div>');
document.write('<div class="flowcoder_viewraw"><a href=\"http://flowcoder.com/152.txt\">view raw<\/a></div>');
document.write('</div></div>');
