自己写了一个程序,实现以守护进程来执行指定的命令,并且返回该守护进程的pid。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ety001
V2EX    程序员

自己写了一个程序,实现以守护进程来执行指定的命令,并且返回该守护进程的pid。

  •  
  •   ety001
    ety001 2013-09-17 11:03:27 +08:00 6200 次点击
    这是一个创建于 4460 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在做一个东西,需要用php去调用ffmpeg,但是问题在于如果ffmpeg不能立即结束(比如进行一个流处理),那么php就一直在等待exec的返回。

    为了解决这个问题,之前用的方法是把ffmpeg的执行结果输出到/dev/null,然后再加上&让其后台执行,pid是靠grep进程列表找到执行的命令,但是这个方法总感觉不是很可靠,因为grep的时候,关键字多一个空格,就找不到pid了。

    现在自己写了一个C程,让C程来执行ffmpeg,同时返回ffmpeg的进程id。由于平时很少写C,还请各位帮看看有什么安全隐患。另外有其他的方法,大家可以一起讨论下~

    代码地址:https://github.com/ety001/mytools/blob/master/daemonRun/daemonRun.c

    PS:表示不知道怎么把github的代码贴进来。。
    11 条回复    2018-12-06 15:46:28 +08:00
    lqs
        1
    lqs  
       2013-09-17 12:07:25 +08:00   1
    可以用 glibc 里的 daemon(3) 来代替你自己写的 init_daemon 函数。
    missdeer
        2
    missdeer  
       2013-09-17 12:20:17 +08:00   2
    为毛要自己写,Linux上有daemonize小工具,-p参数把pid写入到文件中
    ety001
        3
    ety001  
    OP
       2013-09-17 13:23:13 +08:00
    @missdeer 显然我不是专业写C的。。
    hfcorriez
        4
    hfcorriez  
       2013-09-17 14:17:51 +08:00   1
    这基本用不到c,PHP有很多种方法可以实现,看看php-childprocess应该可以满足你的需求 https://github.com/hfcorriez/php-childprocess/
    wudikua
        5
    wudikua  
       2013-09-17 14:23:59 +08:00   1
    pcntl_fork 我想可以满足你想要的。
    ety001
        6
    ety001  
    OP
       2013-09-17 15:54:10 +08:00
    @hfcorriez 膜拜,有时间的时候,一定要仔细看看
    ety001
        7
    ety001  
    OP
       2013-09-17 15:55:50 +08:00
    @wudikua 刚才测试了一下,貌似只能得到调用ffmpeg的php进程的pid,拿不到ffmpeg的。

    代码如下:
    $c = 'ffmpeg -y -f video4linux2 -s 320*240 -r 10 -i /dev/video0 test.avi';
    $pid = pcntl_fork();

    if($pid == -1){
    die('-1');
    } else if($pid){
    echo $pid;
    return;
    } else {
    exec($c);
    }
    hfcorriez
        8
    hfcorriez  
       2013-09-17 17:28:46 +08:00   1
    完全没必要

    exec('ffmpeg -y -f video4linux2 -s 320*240 -r 10 -i /dev/video0 test.avi >/dev/null 2>1 & echo $!');
    ety001
        9
    ety001  
    OP
       2013-09-17 17:56:33 +08:00
    @hfcorriez Thanks!
    labasq
        10
    labasq  
       2017-07-31 08:54:40 +08:00
    @hfcorriez
    这个是 Linux 下的,Windows 的不支持
    xttzzxq
        11
    xttzzxq  
       2018-12-06 15:46:28 +08:00
    @hfcorriez 不错比较简洁可用
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3364 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:18 PVG 08:18 LAX 16:18 JFK 19:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86