免费注册 查看新帖 |

Chinaunix

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

多进程打开firefox,如何避免僵死 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-20 11:51 |只看该作者 |倒序浏览
我的程序大概要实现的目标是,点击一个button的时候,调用firefox打开google.cn,多次点击,就在一个firefox 里面打开多个tab,但是现在碰到的问题是,按照我现在的程序,里面出现了很多僵死进程,僵死的进程是我的主进程,我想原因可能会是pid == 0的时候execlp(system("firefox www.baidu.com"),NULL);直接替换了主进程,照成主进程直接变成僵死进程了,不知道是不是这个原因,。不知道这样的问题该如何解决呢?、
#include <gtk/gtk.h>;
#include <unistd.h>;
#include <stdio.h>;
#include <sys/types.h>;
#include <stdlib.h>;

static void play(GtkWidget *widget, gpointer data)
{//每次按下button都调用本回调函数,新的进程也就是在这里开启的,
        pid_t pid;
        pid = vfork();
        if(pid == 0)
        {
            execlp("/usr/bin/firefox www.google.cn",NULL);

        }
        else if (pid<0)
                printf("------------pid<0");
        else if (pid>0)
        {
              printf("father----------pid=%d\n",pid);

       }

}


int main(int argc, char* argv[])
{//包含一个button的window界面
        GtkWidget *window;
        GtkWidget *button;

        gtk_init (&argc, &argv);
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_container_set_border_width (GTK_CONTAINER(window), 10);

        button = gtk_button_new_with_label ("Open Firefox");
        g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(play), NULL);
        gtk_container_add (GTK_CONTAINER (window),button);
        gtk_widget_show_all (window);

        gtk_main();

        return 0;
}


[ 本帖最后由 chentianyu_hit 于 2009-3-20 14:14 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-03-20 15:39 |只看该作者
你需要为fork出来的子进程收尸

论坛徽章:
0
3 [报告]
发表于 2009-03-20 16:16 |只看该作者
vfork会阻塞父亲,另外僵尸要处理SIGCHILD信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP