<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[[实践OK]用c语言实现HUP信号重启进程的方法~]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Fri, 11 Aug 2017 12:30:50 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：用Linux的信号Signal实现发信号给进程，是一种进程间通讯的办法，主要用来重新加载配置、重启服务、杀死进程、进程间通讯等。<br/>下面就是一个通过向进程发送Signal信号以该进程退出，重新起了一新的子进程，用到了kill -HUP PID，主要是学习HUP信号的C语言编码方法。<br/><textarea name="code" class="php" rows="15" cols="100">
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;signal.h&gt;
#include &lt;unistd.h&gt;
#include &lt;errno.h&gt;
#include &lt;syslog.h&gt;
#include &lt;stdarg.h&gt;
char **bak_argv;
int flag = 0;
void restart(void);
void sighup_handler(int sig);
// argv[0] 尽量使用绝对路径, 因为程序执行过程中可能会使用 chdir() .
int main(int argc, char *argv[])
&#123;
 openlog(&quot;sig_hup&quot;, LOG_PID, 0);
 syslog(LOG_ERR, &quot;%s&quot;, argv[0]);
 closelog();

 bak_argv = argv;
 signal(SIGHUP, sighup_handler);

 while(1)
 &#123;
&nbsp;&nbsp;if(flag)
&nbsp;&nbsp; restart();
&nbsp;&nbsp;sleep(10);
 &#125;
 return 0;
&#125;
void sighup_handler(int sig)
&#123;
 flag = 1;
&#125;
void restart(void)
&#123;
 switch(fork())
 &#123;
&nbsp;&nbsp;case -1:
&nbsp;&nbsp; openlog(&quot;sig_hup&quot;, LOG_PID, 0);
&nbsp;&nbsp; syslog(LOG_ERR, &quot;fork failed: %s&quot;, strerror(errno));
&nbsp;&nbsp; closelog();

&nbsp;&nbsp; exit(EXIT_FAILURE);
&nbsp;&nbsp; break;
&nbsp;&nbsp;case 0:
&nbsp;&nbsp; break;
&nbsp;&nbsp;default:
&nbsp;&nbsp; exit(EXIT_SUCCESS);
 &#125;
 execv(bak_argv[0], bak_argv);

 openlog(&quot;sig_hup&quot;, LOG_PID, 0);
 syslog(LOG_ERR, &quot;execv(%s, ...) failed: %s&#92;n&quot;, bak_argv[0], strerror(errno));
 closelog();

 exit(EXIT_FAILURE);
&#125;

</textarea><br/><br/>gcc 编译：<br/>gcc nohup.c -o b.out<br/><br/>运行：<br/>./a.out <br/><br/><br/>ps aux&#124;grep b.out<br/>root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4919&nbsp;&nbsp;0.0&nbsp;&nbsp;0.1&nbsp;&nbsp; 4296&nbsp;&nbsp;1328 pts/6&nbsp;&nbsp;&nbsp;&nbsp;S+&nbsp;&nbsp; 20:22&nbsp;&nbsp; 0:00 ./b.out<br/><br/>kill -HUP 4919<br/><br/>#ps aux&#124;grep b.out<br/>root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4958&nbsp;&nbsp;0.0&nbsp;&nbsp;0.1&nbsp;&nbsp; 4296&nbsp;&nbsp;1324 pts/6&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;&nbsp;&nbsp;&nbsp;20:23&nbsp;&nbsp; 0:00 ./b.out<br/><br/>From:http://www.jb51.net/article/37422.htm
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]用c语言实现HUP信号重启进程的方法~]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>