免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 17653 | 回复: 39
打印 上一主题 下一主题

一个程序如何将自己终止后重启 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-22 18:03 |只看该作者 |倒序浏览
程序需要先终止然后重启,如果能做到阿

论坛徽章:
0
2 [报告]
发表于 2007-10-22 18:11 |只看该作者
原帖由 fcloudf 于 2007-10-22 18:03 发表
程序需要先终止然后重启,如果能做到阿


很多种方法 比如说其中一种:



  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. void last() __attribute__ ((destructor));


  5. int main()
  6. {
  7.        printf("This function is %s\n", __FUNCTION__);
  8.        return 0;
  9. }

  10. void last()
  11. {
  12.         execl("./a.out", "./a.out", NULL);
  13. }
复制代码


或者在last函数中你先运行另外一个程序, 当成中转站, 再由那个程序来运行当前这个程序. 可以通过execl传递当前进程的名称等参数.

论坛徽章:
0
3 [报告]
发表于 2007-10-22 18:19 |只看该作者
不借助外力是不可能的。

论坛徽章:
0
4 [报告]
发表于 2007-10-22 18:19 |只看该作者
外面套层脚本就好了

论坛徽章:
0
5 [报告]
发表于 2007-10-22 18:26 |只看该作者
signal

void somefunc( int signum ) {
    reloading(...);
}

signal( signum, somefunc );

kill( getpid(), signum );

[ 本帖最后由 xB1ue 于 2007-10-22 18:28 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-10-22 18:56 |只看该作者
看样子只好用EXEC 了

论坛徽章:
0
7 [报告]
发表于 2007-10-22 18:57 |只看该作者
我个人推荐用脚本。
简单、方便、不易出错。

论坛徽章:
0
8 [报告]
发表于 2007-10-22 19:27 |只看该作者
原帖由 scutan 于 2007-10-22 18:11 发表


很多种方法 比如说其中一种:



#include
#include
#include
void last() __attribute__ ((destructor));


int main()
{
       printf("This function is %s\n", __FUNCTION__);
       ...



我知道gcc有__attribute__ ((destructor))这种属性,其他的编译器也有吗?

还有很多方法,那其他的方法了,多谢!^_^

论坛徽章:
0
9 [报告]
发表于 2007-10-22 19:32 |只看该作者
原帖由 augustusqing 于 2007-10-22 19:27 发表



我知道gcc有__attribute__ ((destructor))这种属性,其他的编译器也有吗?

还有很多方法,那其他的方法了,多谢!^_^


其它的方法当然后面几位也说了啊.

论坛徽章:
0
10 [报告]
发表于 2007-10-22 19:43 |只看该作者
我觉得后面说用脚本的兄弟们没有看清楚LZ的标题,没有分析LZ的"需求"就匆忙进行"设计"了
LZ要求的是程序自己终止,再自己重启,包含两部分,终止,重启,程序自己控制这个过程
用脚本包装,尽管简单,方便,不易出错,但这不是用户所需要的,因为这样控制权不在程序自己了

xB1ue 兄的信号的方法,程序即使给自己发送9号信号,自己收到,这个过程自己是没有终止的

只有你的方法,程序是真正的退出了main范围,然后真的可以再启动,不过这样这个程序估计变成不死鸟一辉了,哈哈

还有其他的方法吗?  ^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP