Articles of 叉子

Linux:当退出父进程退出分叉subprocess

我正在用C编写一个程序。程序在启动时执行一次fork() 。 当父进程退出时,让subprocess死掉的最好方法是什么(没有显式的父进程惩罚subprocess)? 例如,如果我发送一个SIGTERM到父进程,孩子不会退出。

如何locking在ruby叉共享IO

我们如何locking多个ruby进程共享的IO? 考虑这个脚本: #!/usr/bin/ruby -w # vim: ts=2 sw=2 et if ARGV.length != 2 $stderr.puts "Usage: test-io-fork.rb num_child num_iteration" exit 1 end CHILD = ARGV[0].to_i ITERATION = ARGV[1].to_i def now t = Time.now "#{t.strftime('%H:%M:%S')}.#{t.usec}" end MAP = %w(nol satu dua tiga empat lima enam tujuh delapan sembilan) IO.popen('-', 'w') {|pipe| unless pipe # Logger child File.open('test-io-fork.log', […]

问题与fork()

我正在写一个分支的shell,父母读取input和subprocessparsing,并用execvp执行它。 主要方法的伪代码: do{ pid = fork(); print pid; if (p<0) { error; exit; } if (p>0) { wait for child to finish; read input; } else { call function to parse input; exit; } }while condition return; 发生什么事情是,我似乎从来没有进入subprocess(PID打印总是积极的,我从来没有进入其他)。 然而,如果我不调用parsing函数,只是有其他退出,我确实正确地input父母和孩子交替。 full code: int main(int argc, char *argv[]){ char input[500]; pid_t p; int firstrun = 1; do{ […]

创build父级pipe理的两个subprocess

我必须编写程序,这将创build两个subprocess这些进程会写在文件中的东西,但这两个进程是由父母pipe理(哪个进程将写)我不是问你们直接的解决scheme,但我需要一些提示,知道从哪里开始。 我想我必须在开始时创build两个分支,然后通过案例来pipe理它,或者类似的东西谢谢

在使用fork()的subprocess中没有得到适当的父ID

我正在尝试使用fork()在subprocess中获取父ID。 但是,我没有得到正确的父母身份证。 有时我做,有时候我没有。 我的printf为父ID打印1。 这是我的代码片段。 任何人都可以解释原因。 for(i = 1 ; i <= n ; i++){ if((pid = fork()) == 0){ printf("Parent id is %u\n", getppid()) ; break ; } }

subprocess打印错误ppid()

在这个程序中,为什么subprocess打印错误ppid()? #include<stdio.h> #include<stdlib.h> #include<unistd.h> void childprocess() { printf("Child: Hi I am the child process\n"); printf("Child: My process id is %d\n", getpid()); printf("Child: My parent is %d\n", getppid()); printf("Child: I am exiting\n"); } void parentprocess() { printf("Parent: Hi I am the parent process\n"); printf("Parent: My process id is %d\n", getpid()); printf("Parent: My parent is %d\n", getppid()); […]

Linux,分叉进程立即挂起

我遇到了叉子的问题,只发生零星。 它基本上一直工作,但在testing系统上每隔一段时间就会失败。 我的研究没有提到任何人提到类似的问题。 该问题发生在embedded式Linux系统上。 没有交换分区可用。 正在运行的进程在所有线程中都阻塞了所有信号,并通过专用线程中的sigtimedwait处理它们。 如果我通过fork启动一个subprocess: 父进程继续返回值> 0.所以分支工作。 没有 -1返回 – 所以没有错误,不是内存不足! 父母然后等待subprocess,永远不会从等待中返回。 subprocess永远不会做任何可观察的事情。 孩subprocess应该做的第一件事就是写一条日志消息。 此日志消息从不出现。 那么它应该产生两个subprocess超时进程和一个工作进程。 这些过程从不出现。 如果我通过命令行上的ps进行检查,我可以看到现有的subprocess。 它处于状态S (可中断睡眠(等待事件完成))。 它从来没有得到任何CPU时间,它没有显示CPU使用率。 如果我杀了-9subprocess,父进程完成等待,并继续愉快。 显示问题的伪码: const pid_t childPid = fork(); if(0 == childPid) { // child process LOG_MSG("Child process started."); // <- This never shows up in the syslog. // do some stuff } else […]

创build一个新的进程来执行ls命令

我想写一个程序,它将创build一个新的进程,在这个subprocess中,它应该执行命令: ls 。 同时,父母应该等待孩子死亡。 但是,我的代码不起作用。 请帮助我非常感谢你! int main() { char * read; size_t size; getline(&read , &size , stdin); read[strlen(read)-1] = '\0'; printf("%s\n" , read); int status; pid_t f; if((f = fork()) == 0) { execvp(read , &read); exit(0); } else { wait(&status); } }

如何写入pipe叉?

我有以下通过fork和execvp执行命令的function。 我在fork中启动的脚本正在侦听input数据。 我如何发送数据到myscript? int external_command() { int pfds[2]; if (pipe(pfds) < 0) return -1; if ((uproc.pid = fork()) == -1) return -1; if (uproc.pid == 0) { /* child */ const char *argv[4]; int i = 0; argv[i++] = "/bin/sh"; argv[i++] = "myscript.sh"; argv[i++] = NULL; close(pfds[0]); dup2(pfds[1], 1); close(pfds[1]); execvp(argv[0], (char **) argv); exit(ESRCH); […]

使父进程等到subprocess调用exec

在linux中,在调用fork()之后,我的subprocess即将调用exec。 有没有办法让父进程等待(),直到孩子执行完成才做任何事情? 谢谢。