mananaddd 发表于 2006-9-29 13:02:53

如何在execl()函数中使程序后台执行?

比如我想执行
pppd /dev/ttyS1 &
让pppd后台执行,省得打印那些乱码
在程序中采用execl()函数调用pppd
execl("/bin/pppd","pppd","/dev/ttyS1","&",(char *)0);
运行的时候提示&不是合法的选项
我想请问如果想让pppd后台执行,如果采用程序中调用execl()函数的方法如何实现?(关键是那个&怎么加?)

mozilla 发表于 2006-9-29 13:12:15

你搜索一下fork2

snnn 发表于 2006-10-24 12:01:50

哎。。。。
fork和exec连用就可以了

nuklear 发表于 2006-10-24 14:01:24

& 是给shell 看的。
那样用是作为一个parameter传递给那个叫pppd的程序的。
你可以理解为在shell里打:
pppd "/dev/ttyS1" "&"

另外,如果你想主程序还继续运行,就必须要fork()出一个
进程的。因为exec会把调用它的那个进程的所有的数据,包括
address space, pc counter, stack等等都消掉换成exec调用的
那个程序的。然后就被完全替换掉了。
fork()刚好相反,它会把调用他的那个进程的所有信息都clone
出来,然后完全独立的在内存里占有自己的address space。

所以你就

if ( ! fork() ) {
    //child
    //call exec
    exec(xxxxxxx);
    printf( "no way to reach here" );
}

//parent
//do something

snnn 发表于 2006-10-24 18:36:35

换句话说,
system函数会调用shell,而exec不会。
页: [1]
查看完整版本: 如何在execl()函数中使程序后台执行?