找回密码
 注册
查看: 2359|回复: 4

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

[复制链接]
发表于 2006-9-29 13:02:53 | 显示全部楼层 |阅读模式
比如我想执行
pppd /dev/ttyS1 &
让pppd后台执行,省得打印那些乱码
在程序中采用execl()函数调用pppd
execl("/bin/pppd","pppd","/dev/ttyS1","&",(char *)0);
运行的时候提示&不是合法的选项
我想请问如果想让pppd后台执行,如果采用程序中调用execl()函数的方法如何实现?(关键是那个&怎么加?)
发表于 2006-9-29 13:12:15 | 显示全部楼层
你搜索一下fork2
回复

使用道具 举报

发表于 2006-10-24 12:01:50 | 显示全部楼层
哎。。。。
fork和exec连用就可以了
回复

使用道具 举报

发表于 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
回复

使用道具 举报

发表于 2006-10-24 18:36:35 | 显示全部楼层
换句话说,
system函数会调用shell,而exec不会。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-5-19 01:23 , Processed in 0.032791 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表