免费注册 查看新帖 |

Chinaunix

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

终端控制问题 很迷惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-24 16:02 |只看该作者 |倒序浏览
最近在写程序的 时候 需要增加个 cli
例如执行 restart hello

我telnet 连上 执行 后 restart hello ; 然后quit 终端就死掉了
restart hello代码 主要就是system(“killall hello”);system(“/usr/local/sbin/hello”);
后来发现system这个函数和终端有关 会 脱离
于是我换了个方法
   pid_t pid;
        if ((pid=fork())<0)
        {
                printf ("fork error");
        }
        else if (pid ==0)
        {
                setsid();
                system("killall hello");
               
               if (execv("/usr/local/sbin/hello",NULL)<0)
               {
                        printf("hello restart error\n");
               }       
        }
        
        signal(SIGCHLD,SIG_IGN);
        return CMD_SUCCESS;

但是这样竟然很多僵尸hello的进程 而且cli终端执行quit后还是死在那里 高不明白了
大侠们多多指教

[ 本帖最后由 vagabondyl 于 2006-5-24 16:53 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-05-24 16:34 |只看该作者
怎么 没有人解释一下阿:(

论坛徽章:
0
3 [报告]
发表于 2006-05-24 17:02 |只看该作者
不要沉了阿 先顶一个

[ 本帖最后由 vagabondyl 于 2006-5-24 17:06 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-05-24 17:51 |只看该作者
子进行和父进程同时启动,

子进程执行其它的了,
父进程一会就死了,
子进程就变成僵尸进程了,

论坛徽章:
0
5 [报告]
发表于 2006-05-24 20:12 |只看该作者
原帖由 stiandao 于 2006-5-24 17:51 发表
子进行和父进程同时启动,

子进程执行其它的了,
父进程一会就死了,
子进程就变成僵尸进程了,
僵尸进程是没有了 我开始弄错了  就是终端问题
情况就 类似 配置路由器 执行完命令 restart hello
然后去执行其他的命令
最后执行quit 完了终端就停止在那里了

论坛徽章:
0
6 [报告]
发表于 2006-05-25 09:35 |只看该作者
还得顶一下要不就又被淹没了

论坛徽章:
0
7 [报告]
发表于 2006-05-25 10:49 |只看该作者
  1.    pid_t pid;
  2.         if ((pid=fork())<0)
  3.         {
  4.                 printf ("fork error");
  5.         }
  6.         else if (pid ==0)
  7.         {
  8.                 setsid();
  9.                 system("killall hello");
  10.                
  11.                if (execv("/usr/local/sbin/hello",NULL)<0)
  12.                {
  13.                         printf("hello restart error\n");
  14.                }
  15.                 printf("debug...");
  16.                 exit(0);
  17.         }
  18.         
  19.         signal(SIGCHLD,SIG_IGN);
  20.         return CMD_SUCCESS;
复制代码


将执行结果送到某一文件里面去跟踪一下。

论坛徽章:
0
8 [报告]
发表于 2006-05-25 13:29 |只看该作者
原帖由 zhhui2000 于 2006-5-25 10:49 发表
[code]   pid_t pid;
        if ((pid=fork())<0)
        {
                printf ("fork error");
        }
        else if (pid ==0)
        {
                setsid();
        ...

不太明白什么意思阿  能否再详细点那
我是实在找不到关于终端控制的资料来看 了

论坛徽章:
0
9 [报告]
发表于 2006-05-25 16:59 |只看该作者
你把SIGCHLD给IGN了,当然出僵尸了。

写一个信号处理程序,在里面用waitpid消除僵尸。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP