Articles of fork

使用fork()在C(不是C ++)中创build3个孩子

嗨,我一直在制定一项计划,让孩子们分叉,然后再从每个孩子那里分娩更多的孩子,但这不是我需要帮助的。 当我运行我的程序(在这里它是一个function,但工作原理是一样的)我应该有一个父母(PPID)产卵3个孩子(PIDS = 1,2,3),但我得到的是相同的PID和PPID 3次(我现在的代码),或者在我得到3个父母之前,每个父母都有一个孩子,PPIDS与PIDS不同,但PPID与以前的孩子PID一样。 在我最近的尝试中,从不在父子(父亲)的信息上方显示孩子(儿子)。 它应该看起来像这样 [dad] hi am I PID 1234 and I come from ####(dont care what this number is) [son] hi i am PID 1111 and I come from PPID 1234 [son] hi i am PID 1112 and I come from PPID 1234 [son] hi i am PID 1113 and I […]

使用Python 3.6.1在Linux / Intel Xeon上使用“fork”上下文块进行多处理?

问题描述 我稍微调整了这个答案的代码(见下文)。 但是,当在Linux上运行这个脚本(如命令行: python script_name.py )时,它将打印所有jobs running: x ,但之后似乎卡住了。 但是,当我使用spawn方法( mp.set_start_method('spawn') )它工作得很好,立即开始打印countervariables的值(请参阅listener方法)。 题 为什么它只在产卵过程中起作用? 我怎样才能调整代码,所以它与Forc的工作(因为它可能更快) 码 import io import csv import multiprocessing as mp NEWLINE = '\n' def file_searcher(file_path): parsed_file = csv.DictReader(io.open(file_path, 'r', encoding='utf-8'), delimiter='\t') manager = mp.Manager() q = manager.Queue() pool = mp.Pool(mp.cpu_count()) # put listener to work first watcher = pool.apply_async(listener, (q,)) jobs […]

Linux:fork&execv,等待subprocess挂起

我写了一个辅助函数来启动一个使用fork()和execv()这个答案的过程 。 它用于启动例如mysqldump来进行数据库备份。 代码在不同程序的不同位置工作得很好。 现在我击中了一个失败的星座:这是一个呼叫systemctl来停止一个单位。 运行systemctl工作,单位停止。 但是在中间进程中,等待()进程的时候,wait()挂起,直到超时过程结束。 如果我检查,如果工作进程完成kill(),我可以告诉它。 重要提示:除了wait()不表示工作进程结束之外,程序不会出现错误或故障。 我的代码中有什么(见下文)是不正确的,可能会触发这种行为? 我已经读过Threads和fork():在混合它们之前三思,但是我找不到与我的问题有关的任何东西。 奇怪的是:程序中使用了深度,深度和深度的JSON-RPC。 如果我停用使用JSON-RPC的代码,一切正常!? 环境:使用该function的程序是一个multithreading应用程序。 所有线程的信号都被阻塞。 主线程通过sigtimedwait()处理信号。 代码(通过std :: cout输出日志logging的生产代码)和样本主函数: #include <iostream> #include <unistd.h> #include <sys/wait.h> namespace { bool checkStatus(const int status) { return( WIFEXITED(status) && ( WEXITSTATUS(status) == 0 ) ); } } bool startProcess(const char* const path, const char* const argv[], const unsigned int […]

如果我fork()然后做一个execv(),谁拥有控制台?

我正在编写一个Linux应用程序。 如果我调用fork() ,然后运行一个需要控制台input的应用程序,会发生什么? 考虑下面的代码: int process_id = fork(); if (process_id != 0) { /* this is the parent process */ error = execv("../my_other_app", "parameter1", NULL); if (error < 0) { printf("error!"); } } else { /* this is the child process. Wait for my_other_app to set up */ sleep(3); /* now continue */ } printf("########## […]

C ++,linux,fork,execvp,waitpid和SIGTSP

我正在实施一个家庭工作terminal。 我差不多完成了,我只需要实现一个bg(Background)和一个fg(Foreground)命令。 我的代码如下所示: void run(){ string command[] = parseMyInput( getInput() ); int fork_result = fork(); if( -1 == fork_result ) //handle error else if( 0 == fork_result ){ // child setpgrp(); // I don't want the children to get the signals if( -1 == execvp( command[0], makeArgs(command) ) ) //handle error } else { // […]

编写linux shell

我正在学习Unix C并为练习做一些练习。 我目前正在编写我自己的shell,其工作方式类似于linux bash shell。 我下面的代码提供了一个相当基本的shell。 它现在提供I / Oredirect。 我正在尝试添加对pipe道的支持。 最初,我只想添加对单个pipe道的支持。 我试图通过一些在线教程,但不能完全弄清楚从哪里开始。 目前,下面的shell可以处理下面的命令命令。 ls> abc,cat <file1> file2等 #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <string.h> #include <sys/wait.h> #include <fcntl.h> #define TRUE 1 int main(void) { char *arg_list[10]; int status; int counter = 0; int counter2 = 0; pid_t pid; char buf[100]; char inFile[10]; […]

为什么fork()在subprocess中返回0?

正如我们所知,fork()将返回两次,即两个PID。 subprocess的PID在父进程中返回,并在subprocess中返回0。 为什么0在subprocess中返回? 有什么特别的原因呢? 更新我被告知在父进程和subprocess之间使用链表,父进程知道subprocess的PID,但是如果没有孙子,那么subprocess就会得到0.我不知道是否正确?

为什么FT_Read()在subprocess中失败,但在父进程中工作?

我有以下程序,它使用ftd2xx库向USB设备写入一个字节,然后读取答复。 #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <stdarg.h> #include "../ftd2xx.h" void fatal (const char *format,…) { va_list argp; fprintf(stderr, "FATAL: "); va_start(argp, format); vfprintf(stderr, format, argp); va_end(argp); fprintf(stderr, "\n"); exit(3); } int main(int argc, char* argv[]) { int pid = fork(); if (pid > 0) { //replace with: if (pid == 0) { FT_STATUS […]

是否有可能在Java中双叉进程?

我需要双叉vmware,所以它不会inheritanceterminalID(TTY / pts)。 这是我到目前为止,但我无法访问到runtime.exec进程fork到另一个进程(这将删除terminalID)。 Runtime runtime = Runtime.getRuntime(); Process proc = runtime.exec("vmware"); 有没有办法在Java中“守护进程”?

Linux调度器是否喜欢在fork()之后运行subprocess?

Linux调度器是否喜欢在fork()之后的父进程中运行subprocess? 通常,分叉进程会执行某种types的exec ,所以最好在父进程之前让subprocess运行(防止写入时复制)。 我假设孩子将在创build后执行exec作为第一个操作。 是我的假设(即调度程序将喜欢孩子的过程)是正确的。 如果没有,为什么? 如果是的话,是否有更多理由让孩子先行?