当前位置: 技术问答>linux和unix
子线程中fork再execl的问题
来源: 互联网 发布时间:2016-12-02
本文导语: 最近做一个控制器(系统为嵌入式Linux)的图形开发软件,控制程序编译成可执行文件后,通过以太网下载到控制器,问题出在控制器端的接收进程上(进程名为netdaemon)。 netdaemon的机制就是,监听一指定端口,收...
最近做一个控制器(系统为嵌入式Linux)的图形开发软件,控制程序编译成可执行文件后,通过以太网下载到控制器,问题出在控制器端的接收进程上(进程名为netdaemon)。
netdaemon的机制就是,监听一指定端口,收到连接请求后,调用pthread_create启动一个线程,线程中接收完图形开发软件传输过来的控制程序后,fork()一个子进程,子进程中调用execl执行接收到的控制程序。
执行的结果
启动NetDaemon后 ps显示:
826 root 404 S ./NetDaemon
接收并启动控制程序后 ps显示:
826 root 520 S ./NetDaemon
828 root 520 S ./NetDaemon
832 root 440 S CtrlProgram
为什么出现了两个NetDaemon进程?
查手册execl: The exec() family of functions replaces the current process image with a new process image.
不是把子进程实例用控制程序的实例替代吗?
(控制器linux为2.6.21; 交叉编译netdaemon编译用的arm-linux-gcc3.4.1)
盼指点
netdaemon的机制就是,监听一指定端口,收到连接请求后,调用pthread_create启动一个线程,线程中接收完图形开发软件传输过来的控制程序后,fork()一个子进程,子进程中调用execl执行接收到的控制程序。
执行的结果
启动NetDaemon后 ps显示:
826 root 404 S ./NetDaemon
接收并启动控制程序后 ps显示:
826 root 520 S ./NetDaemon
828 root 520 S ./NetDaemon
832 root 440 S CtrlProgram
为什么出现了两个NetDaemon进程?
查手册execl: The exec() family of functions replaces the current process image with a new process image.
不是把子进程实例用控制程序的实例替代吗?
(控制器linux为2.6.21; 交叉编译netdaemon编译用的arm-linux-gcc3.4.1)
盼指点
|
execl 是怎么调用的?贴一下