Linux C 进程不知道为什么当换成vfork后 var不能正常输出
发布网友
发布时间:2024-09-27 01:24
我来回答
共1个回答
热心网友
时间:2024-10-14 13:52
你在用vfork之前有没有仔细看manual? 你这种用法完全是错误的,vfork之后的子进程必须调用 exec来执行子进程需要执行的动作(或者直接_exit退出)。直接在vfork之后的子进程访问(写)除了pid之外的任何变量都会导致不可预知的结果 (因为子进程和父进程共享完全一致的地址空间,你在子进程做的修改对父进程可能会导致不可预期的结果),同时在子进程也不能用return语句返回,退出也必须用 _exit, 而不是 exit。
Linux C 进程不知道为什么当换成vfork后 var不能正常输出
你这种用法完全是错误的,vfork之后的子进程必须调用 exec来执行子进程需要执行的动作(或者直接_exit退出)。直接在vfork之后的子进程访问(写)除了pid之外的任何变量都会导致不可预知的结果 (因为子进程和父进程共享完全一致的地址空间,你在子进程做的修改对父进程可能会导致不可预期的结果),同时在子...
Linux下fork,vfork,clone和exec的区别
vfork最初是因为fork没有实现COW机制,而很多情况下fork之后会紧接着exec,而exec的执行相当于之前fork复制的空间全部变成了无用功,所以设计了vfork。而现在fork使用了COW机制,唯一的代价仅仅是复制父进程页表的代价,所以vfork不应该出现在新的代码之中。在Linux的manpage中队vfork有这样一段话:It is...
Linux系统命令中exit与exit的区别
在由‘fork()’创建的子进程分支里,正常情况下使用‘exit()’是不正确的,这是 因为使用它会导致标准输入输出(stdio: Standard Input Output)的缓冲区被清空两次,而且临时文件被出乎意料的删除(临时文件由tmpfile函数创建在系统临时目录下,文件名由系统随机生成)。在C++程序中情况会更糟,因为静态目标(static objects...
如何理解进程和其终止:exit,_exit,return
`vfork()`不应该调用`return`,因为这可能导致意外的程序行为,因为它创建了一个轻量级的子进程,直接使用`exit`或`_exit`更安全。在处理输出时,`printf()`和`write()`函数的缓冲行为是理解的关键。通常,`printf()`输出到终端时采用行缓冲,而写入文件时采用块缓冲。在终端输出中,`printf()`立即...
linux strace命令
1、strace命令简介:strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux里,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,...
Linux内核中的exec函数有什么作用?
vfork最初是因为fork没有实现COW机制,而很多情况下fork之后会紧接着exec,而exec的执行相当于之前fork复制的空间全部变成了无用功,所以设计了vfork。而现在fork使用了COW机制,唯一的代价仅仅是复制父进程页表的代价,所以vfork不应该出现在新的代码之中。在Linux的manpage中队vfork有这样一段话:It is...
linux下的命令都是干什么用的?
vfork最初是因为fork没有实现COW机制,而很多情况下fork之后会紧接着exec,而exec的执行相当于之前fork复制的空间全部变成了无用功,所以设计了vfork。而现在fork使用了COW机制,唯一的代价仅仅是复制父进程页表的代价,所以vfork不应该出现在新的代码之中。在Linux的manpage中队vfork有这样一段话:It is...
linux的exec是什么意思?
vfork最初是因为fork没有实现COW机制,而很多情况下fork之后会紧接着exec,而exec的执行相当于之前fork复制的空间全部变成了无用功,所以设计了vfork。而现在fork使用了COW机制,唯一的代价仅仅是复制父进程页表的代价,所以vfork不应该出现在新的代码之中。在Linux的manpage中队vfork有这样一段话:It is...