草庐IT

sys_fork

全部标签

fork 和(失败的)exec 后 C 文件指针发生变化

我制作了制作fork的程序,我认为child不会影响parent。虽然我没有在父级中做任何更改,但是文件指针已更改。#include#include#include#include#includeintmain(void){FILE*fp=fopen("sm.c","r");charbuf[1000];char*args[]={"invailid_command",NULL};fgets(buf,sizeof(buf),fp);printf("I'mone%d%ld\n",getpid(),ftell(fp));if(fork()==0){execvp(args[0],args);ex

c++ - 释放 C++ 资源和 fork-exec?

我正在尝试使用fork-exec从我的C++项目中生成一个新进程。我正在使用fork-exec来创建到子进程的双向管道。但我担心fork进程中的资源无法正确释放,因为exec-call将完全接管我的进程并且不会调用任何析构函数。我尝试通过抛出异常并从main末尾的catchblock调用execl来规避此问题,但此解决方案不会破坏任何单例。有什么明智的方法可以安全地实现这一目标吗?(希望避免任何atExit黑客攻击)例如:下面的代码输出:Wearethechild,gogo!Parentproc,donothingDestroyingobject即使fork进程也有一个单例拷贝,需要在

c++ - 释放 C++ 资源和 fork-exec?

我正在尝试使用fork-exec从我的C++项目中生成一个新进程。我正在使用fork-exec来创建到子进程的双向管道。但我担心fork进程中的资源无法正确释放,因为exec-call将完全接管我的进程并且不会调用任何析构函数。我尝试通过抛出异常并从main末尾的catchblock调用execl来规避此问题,但此解决方案不会破坏任何单例。有什么明智的方法可以安全地实现这一目标吗?(希望避免任何atExit黑客攻击)例如:下面的代码输出:Wearethechild,gogo!Parentproc,donothingDestroyingobject即使fork进程也有一个单例拷贝,需要在

c - 重新启动 fork 进程中的线程

我知道没有标准的方法来fork多线程进程。但是,我想到一件事,那就是因为fork进程是精确的副本或原始进程,所以线程堆栈会在那里。有没有人知道如何从fork进程中的最后执行状态重新启动线程。为简单起见,我们可以假设在fork时没有获得锁。例如,fork是在两个障碍之间完成的。 最佳答案 线程执行状态不仅仅是栈中的数据。也是CPU寄存器组,丢失了。do_fork()系统调用只是不从执行系统调用do_fork的线程复制任何其他线程->copy_process并且在line1181处有一个对copy_thread的调用retval=cop

c - 重新启动 fork 进程中的线程

我知道没有标准的方法来fork多线程进程。但是,我想到一件事,那就是因为fork进程是精确的副本或原始进程,所以线程堆栈会在那里。有没有人知道如何从fork进程中的最后执行状态重新启动线程。为简单起见,我们可以假设在fork时没有获得锁。例如,fork是在两个障碍之间完成的。 最佳答案 线程执行状态不仅仅是栈中的数据。也是CPU寄存器组,丢失了。do_fork()系统调用只是不从执行系统调用do_fork的线程复制任何其他线程->copy_process并且在line1181处有一个对copy_thread的调用retval=cop

linux - 防止 fork() 复制套接字

我有以下情况(伪代码):functionf:pid=fork()ifpid==0:exectoanotherlong-runningexecutable(nocommunicationneededtothatprocess)else:return"something"f暴露在XmlRpc++上服务器。当通过XML-RPC调用函数时,父进程在函数返回“something”后打印“doneclosingsocket”。但只要子进程仍在运行,XML-RPC客户端就会挂起。当我终止子进程时,XML-RPC客户端正确地完成了RPC调用。在我看来,我在使用fork()将套接字描述符复制到子进程时遇

linux - 防止 fork() 复制套接字

我有以下情况(伪代码):functionf:pid=fork()ifpid==0:exectoanotherlong-runningexecutable(nocommunicationneededtothatprocess)else:return"something"f暴露在XmlRpc++上服务器。当通过XML-RPC调用函数时,父进程在函数返回“something”后打印“doneclosingsocket”。但只要子进程仍在运行,XML-RPC客户端就会挂起。当我终止子进程时,XML-RPC客户端正确地完成了RPC调用。在我看来,我在使用fork()将套接字描述符复制到子进程时遇

c - 为什么 execvp() 使用 fork() 执行两次?

我正在实现一个shell。尝试执行更改目录以外的命令时,execvp()运行,child终止并创建一个新的child。当我更改目录时,child不会终止并创建一个新的child。这是我的代码示例:for(;;){printf("bash:");parse();...pid_tpid=fork()if(pid==0)if(!strcmp(line[0],"cd"))if(!line[1])(void)chdir(getenv("HOME"));else(void)chdir(line[1]);elseexecvp(line[0],line);...if(pid>0){while(pid=

c - 为什么 execvp() 使用 fork() 执行两次?

我正在实现一个shell。尝试执行更改目录以外的命令时,execvp()运行,child终止并创建一个新的child。当我更改目录时,child不会终止并创建一个新的child。这是我的代码示例:for(;;){printf("bash:");parse();...pid_tpid=fork()if(pid==0)if(!strcmp(line[0],"cd"))if(!line[1])(void)chdir(getenv("HOME"));else(void)chdir(line[1]);elseexecvp(line[0],line);...if(pid>0){while(pid=

linux - 是否有明确的资源记录 linux/proc 和/sys 文件系统的导航?

我们使用Linux中的/proc和/sys文件系统来发现各种类型的系统配置信息。通常,我们会四处探索不同的文件和目录,直到找到我们需要的信息。我想知道是否有人知道一个权威资源,它记录了如何通过/proc和/sys文件系统导航以查找特定信息。我们主要从这些文件系统中的各种文件中获取USB、PCI和SCSI信息。谢谢, 最佳答案 /sys的最终资源是Documentation/sysfs-rules.txt./proc/sys的最终资源是Documentation/sysctl/./proc其余部分的最终资源似乎是Documentati