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

为什么会segmentation fault

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

    本文导语:  以下是一段测试fork和vfork差别的代码。 #include  #include  #include  int main() {  int i = -1;  int j = -1;         i = vfork();         j = fork();         printf("nThe PID is [%d],[%d]n", i,j);         return 0; } ...

以下是一段测试fork和vfork差别的代码。
#include 
#include 
#include 

int main()
{
 int i = -1;
 int j = -1;
        i = vfork();
        j = fork();
        printf("nThe PID is [%d],[%d]n", i,j);

        return 0;
}


[back@Test back]$ gcc test.c -o test
[back@Test back]$ ./test

The PID is [0],[29304]   //29303打印 

The PID is [29303],[29305]  //29302打印
Segmentation fault
[back@Test back]$
The PID is [29303],[0]   //29305打印

The PID is [0],[0]   //29304打印

初始PID为29302,vfork后其阻塞,其子进程(29303)执行fork()产生29304 ,而29302结束阻塞
后则fork()产生29305如下图.
 vfork()     fork() 
29302------------->29303-------------->29304
  |
  |
  |fork()
  |
  |
29305  


pid的打印结果符合预期,但是为什么会有Segmentation fault呢。

|
把return 0 改为exit(0),试试

|
STANDARD DESCRIPTION
       (From  SUSv2  / POSIX draft.)  The vfork() function has the same effect
       as fork(), except that the behaviour is undefined if the  process  cre-
       ated  by vfork() either modifies any data other than a variable of type
       pid_t used to store the return value from vfork(), or returns from  the
       function  in  which  vfork()  was  called,  or calls any other function
       before successfully calling _exit() or one  of  the  exec()  family  of
       functions.

LINUX DESCRIPTION
       vfork(), just like fork(2), creates a child process of the calling pro-
       cess.  For details and return value and errors, see fork(2).

       vfork() is a special case of clone(2).  It is used to create  new  pro-
       cesses  without  copying the page tables of the parent process.  It may
       be useful in performance sensitive applications where a child  will  be
       created which then immediately issues an execve().

       vfork()  differs  from fork() in that the parent is suspended until the
       child makes a call to execve(2) or _exit(2).  The child shares all mem-
       ory  with  its parent, including the stack, until execve() is issued by
       the child.  The child must not return from the current function or call
       exit(), but may call _exit().

       Signal  handlers  are inherited, but not shared.  Signals to the parent
       arrive after the child releases the parent's memory.

|

man vfork,里面已经说得很清除了,看看吧,主要如下一段话:
 vfork() differs from fork(2) in that the parent is suspended until the child makes  a  call  to
 execve(2) or _exit(2).  The child shares all memory with its parent, including the stack, until
 execve(2) is issued by the child.  The child must not return from the current function or  call
 exit(3), but may call _exit(2).

|
gdb ....

    
 
 

您可能感兴趣的文章:

  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • Segmentation fault
  • 急求segment fault问题解决办法!
  • 【怪事】 线程库-lpthread发生Segmentation fault问题
  • linux+SDL segmentation fault
  • Segmentation fault是什么错误?
  • 调试出错:segmentation fault
  • segmentation fault问题
  • segmentation fault会出core吗?
  • 关于"Segmentation fault"的调试问题
  • Segmentation fault问题
  • 用popen,不能使用fseek了?Segmentation fault错误
  • main函数返回收到segmentation fault
  • AIX中出现的Segmentation fault(code dump)如何解决?
  • 大家帮忙看看这个Segmentation fault是什么情况
  • 求救Segmentation fault(核心转储)是什么意思
  • 输入重定向后发生segmentation fault错误?
  • 出现segmentation fault 的错误后如何修复系统!!!
  • 请教关于在redhat linux 9下的rhide1.5.1和dev-c++运行错误:Segmentation fault
  • php5.3+zend guard loader安装时出现Segmentation fault
  • 在solaris8上编译完成,链接的时候出现Segmentation Fault - core dumped这种错误,请问是什么原因??
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.swing.text类segment的类成员方法: segment定义及介绍
  • chmod segmentation
  • java命名空间javax.swing.text类segment的类成员方法: count定义及介绍
  • 程序调用malloc,引发segmention error,怎么会这样??????????
  • java命名空间java.lang类character的类成员方法: directionality_segment_separator定义及介绍
  • linux下信号11 (Segmentation violation (ANSI))是何种错误,急!急!急!急!
  • java命名空间javax.swing.text类segment的类成员方法: tostring定义及介绍
  • segmentation fault 有没有可能是是因为内存申请失败?
  • java命名空间javax.swing.text类segment的类成员方法: offset定义及介绍
  • 求教: Attach 共享内存,报 Segmentation fault
  • java命名空间javax.swing.text类segment的类成员方法: array定义及介绍
  • Linux 下 memcpy()有Segmentation fault
  • java命名空间javax.swing.text类segment的类成员方法: ispartialreturn定义及介绍
  • segment fault错误,高手进来,急急急
  • java命名空间javax.swing.text类segment的类成员方法: getindex定义及介绍
  • segmentation fault(core dump)这句话怎么解释??
  • java命名空间javax.swing.text类segment的类成员方法: getbeginindex定义及介绍
  • 请问什么是Segmentation Fault错误?
  • java命名空间javax.swing.text类segment的类成员方法: getendindex定义及介绍
  • 打开设备,测试驱动程序,报错:segmentation fault
  • java命名空间javax.swing.text类segment的类成员方法: length定义及介绍
  • 各位大虾segmentation fault的问题。我都晕了,帮帮忙吧,仅有的10送给你


  • 站内导航:


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

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

    浙ICP备11055608号-3