Tag: 进程

vfork()atexit断言失败

我想了解下面这段代码 #include #include #include int main() { pid_t pid ; unsigned int i=0; pid=vfork(); switch(pid) { case -1: // some sort of error puts(“fork error”); break; case 0: // the child process while(i<100) { printf("%d\n", i); i++; } break; default: //parent while(i<1000) { printf("%d\n", i); i++; } break; } // _exit(0); } 请不要告诉我vfork()是坏事和这些事情。我知道它是,但正是在这段代码中正在发生的事情导致了这种错误。 提前致谢

新创建的暂停进程的EIP仅在Windows XP上失败 – 在kernal32.dll映像下的EIP?

我的程序在Windows Vista Ultimate和Windows 7上运行完美,但在Windows XP上运行失败。 首先,我的应用程序创建一个系统文件的进程,它调用GetThreadContext(remote_thread)并将LPVOID值设置为值context-> Eip,然后检查从VirtualQueryEx设置的结构MEMORY_BASIC_INFORMATION中的值。 以下是VirtualQueryEx在调用时返回的值: Windows XP 0 – 分配基础 0 – 分配保护 2088828928 – 基地址 1 – 保护 983040 – 地区大小 65536 – 状态 0 – 类型 Windows 7的 2003959808 – 分配基础 128 – 分配保护 2004025344 – 基地址 32 – 保护 876544 – 区域大小 4096 – 国家 16777216 – 类型 Windows […]

如何在C语言中使用sched_getaffinity和sched_setaffinity?

我在尝试着: 使用处理器固定同时运行16个副本(每个核心2个副本) 在处理器固定(每个核心2个副本)的同时运行8个副本,并在某个function表示function1完成后将处理器核心翻转到最远的核心。 我面临的问题是如何选择最远的处理器。 有些朋友建议使用sched_getaffinity和sched_setaffinity,但我认为没有找到任何好的例子。

这里分叉了多少个进程

我知道这可能是一个愚蠢的问题,但任何人都可以帮助我理解以下代码片段的行为 //label 0 int main(){ fork();//label 1 fork();//label 2 fork();//label 3 return 0; } 据我所知,进程树就是这样的 [0] / | \ [1] [2] [3] / \ | [2] [3] [3] | [3] 我对吗? 如果是这样的话,我很困惑为什么第二个fork不会产生对应于label 1 fork的进程,而第三个fork不再产生任何进程。 我的意思是子进程是父进程的精确副本(至少在代码中),因此它必须完整地执行其父进程的代码。 任何人都可以帮助我解决这个困惑……

如何正确使用fork()和exec()

我有这个代码; pid_t process; process = fork(); if (process < 0){ //fork error perror("fork"); exit(EXIT_FAILURE); } if (process == 0){ //i try here the execl execl ("process.c", "process" , n, NULL); } else { wait(NULL); } 我不知道fork()和exec()是否正确。 当我尝试从bash运行程序时,我没有收到任何结果,所以我认为这部分代码可能存在问题。 谢谢。

如何使用fork()和exec()在Mac OS上创建进程

我正在研究一个相对简单,独立的“ 流程启动器 ”,我希望能够在Windows(XP,Vista,7),Linux(Ubuntu 10.10)以及特别是Mac OS X (10.6)上工作。 Linux和Windows基本上都可以工作,但我在使用Mac版时遇到了一些麻烦。 我希望fork()和exec()函数在Mac OS下可以像在Linux中一样工作。 所以我的第一个问题是: 我应该使用它们在Mac上创建进程还是要使用任何特定于平台的function? 我目前的代码(在Linux下工作正常)来调试它看起来像这样: pid_t processId = 0; if (processId = fork()) == 0) { const char * tmpApplication = “/Path/to/TestApplication”; int argc = 1; char * argv[argc + 1]; argv[0] = tmpApplication; argv[1] = NULL; execv(tmpApplication, argv); }else { //[…] } 不知道这是否可以在Mac OS X下运行,因为我的子进程根本没有启动,而没有出现错误。 谢谢!

只需检查c中的状态过程

我想知道一个过程的状态。 我想我可以使用等待系列function,但实际上我不想等待这个过程,只需检查状态并继续。 我想要类似的东西 checkStatusOfProcess(&status); if(status == WORKING) { //do something } else if(status == exited) { //do something else } else \\I dont care about other states

如何将一个子进程中的stdout链接到C中另一个子进程中的stdin?

我一直在乱搞C试图弄清楚如何做到这一点。 假设我有我的主程序,即父进程。 父级创建了三个子进程,每个进程最终将运行程序(但现在这并不重要)。 我想做的就是让第二个孩子的stdin接收第一个孩子的stdout。 然后第三个孩子的标准输出将接收第二个孩子的标准输出。 父进程的stdin / stdout根本没有搞乱。 到目前为止,我得到的是 pipe(procpipe); parentPid = getpid(); for(i = 0; i < 3; i++) { if(getpid() == parentPid) { child[i] = fork(); if(child[i] == 0) { mynumber = i+1; } } } 但是从那里开始,我有点担心如何使用dup2来正确分配我的管道,以及在我的代码的哪一部分插入它。 谷歌和这个网站上有很多关于如何从父母到孩子的管道的例子,但是我还没有看到一个会告诉我如何将孩子的标准输出连接到另一个孩子的标准输入的确切信息。 编辑:忘记提及:假设我的所有变量都已正确初始化。 int’mynumber’是这样的子进程在创建时知道它是哪个数字,所以我可以通过它给出指令 if(mynumber == whatever)

memcpy是否安全?

我在网上看了一眼,无法满足自己的答案。 memcpy线程安全吗? (在Windows中) 我的意思是,如果我使用单个memcpy写入进程之间共享的内存区域(使用boost :: shared_memory_object),然后尝试使用单个memcpy从另一个进程读取该区域,那么将在写入时自动阻止一个进程发生了什么? 我在哪里可以读到这个?

如何使用共享内存在两个进程之间进行通信

我试图在两个进程之间进行通信。 我试图在一个进程中将数据(如姓名,电话号码,地址)保存到共享内存,并尝试通过其他进程打印该数据。 process1.c #include #include #include int main () { int segment_id; char* shared_memory[3]; int segment_size; key_t shm_key; int i=0; const int shared_segment_size = 0x6400; /* Allocate a shared memory segment. */ segment_id = shmget (shm_key, shared_segment_size, IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR); /* Attach the shared memory segment. */ shared_memory[3] = (char*) shmat […]