Chinaunix

标题: 终端控制问题 很迷惑 [打印本页]

作者: vagabondyl    时间: 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 编辑 ]
作者: vagabondyl    时间: 2006-05-24 16:34
怎么 没有人解释一下阿:(
作者: vagabondyl    时间: 2006-05-24 17:02
不要沉了阿 先顶一个

[ 本帖最后由 vagabondyl 于 2006-5-24 17:06 编辑 ]
作者: stiandao    时间: 2006-05-24 17:51
子进行和父进程同时启动,

子进程执行其它的了,
父进程一会就死了,
子进程就变成僵尸进程了,
作者: vagabondyl    时间: 2006-05-24 20:12
原帖由 stiandao 于 2006-5-24 17:51 发表
子进行和父进程同时启动,

子进程执行其它的了,
父进程一会就死了,
子进程就变成僵尸进程了,
僵尸进程是没有了 我开始弄错了  就是终端问题
情况就 类似 配置路由器 执行完命令 restart hello
然后去执行其他的命令
最后执行quit 完了终端就停止在那里了
作者: vagabondyl    时间: 2006-05-25 09:35
还得顶一下要不就又被淹没了
作者: zhhui2000    时间: 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;
复制代码


将执行结果送到某一文件里面去跟踪一下。
作者: vagabondyl    时间: 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();
        ...

不太明白什么意思阿  能否再详细点那
我是实在找不到关于终端控制的资料来看 了
作者: JohnBull    时间: 2006-05-25 16:59
你把SIGCHLD给IGN了,当然出僵尸了。

写一个信号处理程序,在里面用waitpid消除僵尸。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2