当前位置:  技术问答>linux和unix

关于fork()函数返回的问题

    来源: 互联网  发布时间:2016-04-11

    本文导语:  查资料看linux下fork()函数成功执行后有2个返回值:一个是父进程调用fork后的返回值,其值为刚创建的子进程的ID ;另一个是子进程中fork函数的返回值,其值为0。 编写测试程序 #include  #include  #include  int main(void) { ...

查资料看linux下fork()函数成功执行后有2个返回值:一个是父进程调用fork后的返回值,其值为刚创建的子进程的ID

;另一个是子进程中fork函数的返回值,其值为0。
编写测试程序
#include 
#include 
#include 
int main(void)
{
pid_t  pid;
printf("Process Creation Studyn");
pid = fork();
switch(pid) {
case 0:
printf("Child process is runningn");
break;
case -1:
perror("Process creation failedn");
break;
default:
printf("Parent process is runningn");
break;
}
exit(0);
}
程序执行的结果是:
Process Creation Study
Child process is running
Parent process is running
根据打印结果,fork()函数确实返回了0和非0两个值,而且是先返回了0值。我想用gdb单步调试确认这个结果,在第7行设置断点,执行next,然后print pid,发现始终没有0值出现。请问这是为什么?

|
 直接gdb只跟父进程走,多进程用gdb很不好调试

|
4.10 Debugging Programs with Multiple Processes
On most systems, gdb has no special support for debugging programs which create additional processes using the fork function. When a program forks, gdb will continue to debug the parent process and the child process will run unimpeded. If you have set a breakpoint in any code which the child then executes, the child will get a SIGTRAP signal which (unless it catches the signal) will cause it to terminate.
However, if you want to debug the child process there is a workaround which isn’t too painful. Put a call to sleep in the code which the child process executes after the fork. It may be useful to sleep only if a certain environment variable is set, or a certain file exists, so that the delay need not occur when you don’t want to run gdb on the child. While the child is sleeping, use the ps program to get its process ID. Then tell gdb (a new invocation of gdb if you are also debugging the parent process) to attach to the child process (see Section 4.7 [Attach], page 30). From that point on you can debug the child process just like any other process which you attached to.
On some systems, gdb provides support for debugging programs that create additional processes using the fork or vfork functions. Currently, the only platforms with this feature are HP-UX (11.x and later only?) and gnu/Linux (kernel version 2.5.60 and later).
By default, when a program forks, gdb will continue to debug the parent process and the child process will run unimpeded.
If you want to follow the child process instead of the parent process, use the command set follow-fork-mode.

|
相关的命令如下,详细使用方法可以参考gdb手册,或者看help
set follow-fork-mode
show follow-fork-mode
set detach-on-fork
show detach-on-fork
info forks
delete fork

|
4楼的不错,呵呵.
在case分句里让子进程sleep一段时间,然后新开一个terminal,ps一下子进程的pid, 然后在原先的gdb调试环境中输入: gdb program child_process_pid.


    
 
 

您可能感兴趣的文章:

  • 还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
  • 如何理解fork函数返回2次啊?
  • fork函数的源代码在哪呢
  • linux的fork()函数
  • minGW编译带fork函数的问题?
  • 急于明白Fork的用法.请提供中文解释.谢谢. iis7站长之家
  • 关于fork()函数
  • fork函数的理解。。
  • fork函数,在线等待,马上结贴。谢谢!!!!!!!!!!!!
  • 关于fork函数
  • fork函数详解?
  • fork函数的处理流程
  • 执行一个main函数程序时,unix操作系统调用什么创建进程?fork?newproc?
  • Linux下关于fork()的函数
  • 谁有unix下c的编程接口资料,如fork函数和killppid的说明
  • Linux fork函数的系统调用实现过程是什么呢?
  • linux fork 函数问题
  • 费解呀,函数fork()的疑惑?
  • 怎么理解fork()函数返回两次值?
  • linux fork()函数的疑惑
  • fork getpid 返回值
  • 先 fork 子进程然后 execl 另一个可执行程序, 如何得到这个可执行程序结束的返回值?
  • 调用fork操作后,子进程有返回,父进程挂死,什么原因?
  • fork()的父子进程返回ID
  • 用fork(),exec函数启动一新程序会返回两次执行结果
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 一个fork的问题
  • 新手的问题关于fork?
  • fork() 父子进程执行顺序问题
  • fork的问题
  • 请教一个关于fork的问题。
  • 一个简单的fork问题(那个高手来帮忙呀)
  • 关于fork创建进程的一个问题
  • fork与socket问题
  • 关于fork()的一个问题!?
  • 问个关于fork的小问题
  • fork问题
  • fork()复制进程的问题2
  • fork()问题
  • linuxC中的fork问题,请教大侠帮忙解答
  • 一个简单的fork()问题,求解···在线等
  • fork 带来的问题!
  • fork()复制进程的问题。
  • linux下fork子进程后的问题
  • 用fork()往文件里写数据问题
  • 请教进程fork()相关的,执行效率的问题,看我这段程序.
  • 奇怪:程序一fork子进程时就停住了,似乎根本不能fork子进程啊?
  • unix中的fork2与fork有设么区别?
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 关于fork的不解
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork之后的输出
  • exit和fork是什么关系?他们是怎么配合使用的?
  • 请教 linux的fork从什么版本开始支持COW?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3