Tag: fork

可以确定fork()的执行顺序吗?

我正在练习教科书“操作系统概念第7版”,我对fork()工作方式有点困惑。 根据我的理解, fork()创建一个与其父进程并发运行的子进程。 但是,我们如何确切知道哪个进程首先运行? 我的意思是执行的顺序。 问题 使用fork()系统调用编写C程序,该系统调用在子进程中生成Fibonacci序列。 序列号将在命令行中提供。 这是我的解决方案: #include #include #include #include void display_fibonacci_sequence( int n ) { int i = 0; int a = 1; int b = 1; int value; printf( “%d, %d, “, a, b ); for( ;i < n – 2; ++i ) { value = a + b; printf( […]

为什么这个程序打印“分叉!”4次?

为什么这个程序打印“分叉!”4次? #include #include int main(void) { fork() && (fork() || fork()); printf(“forked!\n”); return 0; }

叉父母孩子沟通

我需要一些方法让父进程分别与每个子进程通信。 我有一些孩子需要与父母分开与其他孩子分开。 父母是否有办法与每个孩子建立私人沟通渠道? 例如,孩子也可以向父母发送一个struct变量吗? 我对这些事情不熟悉,所以对任何帮助表示赞赏。 谢谢

如何通过父进程终止子进程?

我使用fork()创建一个子进程。 如果子进程无法在30秒内完成执行,父进程如何杀死子进程? 我想允许子进程执行长达30秒。 如果超过30秒,父进程将终止它。 你有任何想法吗?

多个子进程

有人可以帮助我如何创建多个具有相同父级的子进程,以便完成特定工作的“某些”部分吗? 例如,应用子进程的外部排序算法; 每个子进程对一部分数据进行排序,最后父进程合并它们。 编辑:也许我应该提到使用循环分叉多个子进程..

Classic C.在execvp函数,stdin和stdout重定向中使用管道

我想使用管道和execvp函数在我的Linux C程序中模拟bash。 例如 ls -l | wc -l 有我的计划: if(pipe(des_p) == -1) {perror(“Failed to create pipe”);} if(fork() == 0) { //first fork close(1); //closing stdout dup(des_p[1]); //replacing stdout with pipe write close(des_p[0]); //closing pipe read close(des_p[1]); //closing pipe write if(execvp(bash_args[0], bash_args)) // contains ls -l /* error checking */ } else { if(fork() == 0) […]

如何在gdb中的fork()之后调试子进程?

调用fork后,当前进程将调用exit(0) 。 但孩子会继续。 switch(fork()) { case -1: exit(1); case 0: //child process,continue break; default: //the current process,exit exit(0); } 在这种情况下,如何继续调试子进程?

在C中遇到fork(),pipe(),dup2()和exec()时遇到问题

这是我的代码: #include #include #include #include #include #define NUMPIPES 2 int main(int argc, char *argv[]) { char *bBuffer, *sPtr, *aPtr = NULL, *pipeComms[NUMPIPES], *cmdArgs[10]; int fdPipe[2], pCount, aCount, i, status, lPids[NUMPIPES]; pid_t pid; pipe(fdPipe); while(1) { bBuffer = readline(“Shell> “); if(!strcasecmp(bBuffer, “exit”)) { return 0; } sPtr = bBuffer; pCount = -1; do { aPtr = […]

为什么fork()两次

Nagios让我配置child_processes_fork_twice= 。 文件说 此选项确定Nagios在执行主机和服务检查时是否会fork()子进程两次。 默认情况下,Nagios fork()两次。 但是,如果启用了use_large_installation_tweaks选项,则只会fork()一次。 据我所知, fork()将生成一个新的子进程。 我为什么要这样做两次?

在c语言中使用fork

现在我在理解fork()系统调用的工作方面遇到了问题。 我写了一个代码如下: #include int main() { int a, b; b=fork(); printf(“\n the value of b = %d”,b); } 此代码的输出如下: 现在我不明白为什么输出是这样的? 之后,我只是在我的代码中添加一行,输出完全不同。 我的代码如下: int main() { int a, b; b=fork(); 当我运行代码输出跟随2389我的名字是manish the value of b = 0 现在我对fork()调用的工作感到困惑。 我的问题如下: fork()如何工作? 控制在fork()调用之后的位置? 任何机构都能解释为什么编写的代码输出有问题吗? 为什么b的输出出现在不同的位置意味着在第一个代码中b = 2260的输出恰好在输出b = 0之前,而b = 2389值不是在b = 0之前? 请解释我在问题中编写的代码中的fork的工作,以便我可以正确地学习它。