小编jac*_*ter的帖子

C fork()导致未指定的意外函数调用

我的第一个Stack Overflow帖子,我是网站上的潜伏者,但我真的想开始问我自己的一些问题!

我正在学习使用unistd.h库的fork()系统调用.我想测试一下我正在学习的内容.我已经在教科书中找到了关于在UNIX中创建简单进程的示例.我在OSX上这样做.我已经设置了一个创建shell的任务,我不想给出构建shell的完整答案,因此我为什么要问这个特定的系统调用,而不是整个程序.

代码本身运行完全正常,并提供预期的输出.

这是正常的代码:

#include <stdio.h>
#include <unistd.h>

int main() {
    pid_t pid;
    pid = fork();
    if(pid == 0){
        printf("\nI'm the child\n\n");
    }
    else if(pid > 0){
        printf("\nI'm the parent, child has pid: [%d]\n", pid);
    }
    else{
        printf("ERROR");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我把它放在我的shell程序中时,它引起了我在网上找到的一个叉炸弹.

使用命令'test'调用创建此过程的函数.当我运行该函数时,它提供与独立版本相同的输出,但是当我继续前进并退出时,似乎在无限循环中再次调用该测试函数.然后,我无法杀死进程因为我的计算机滞后,显然是因为正在创建一堆进程而我必须重新启动计算机.我现在已经完成了几次,因为每次运行都需要执行重启,因此无法进行测试.

我有一个期望退出命令结束的while循环.代码应该是自解释的,如下所示.我知道很多这是不好的做法,我只是试图测试这些概念,从研究我相信我应该使用wait()系统调用,但我想了解为什么我的代码导致这种情况发生.

完整的计划:

main.c中

#include "shell.h"

int main() {
    clear();
    printf("Jack's Shell\n");
    shellLoop();
    clear();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

shell.c

#include "shell.h"

void shellLoop(){
    char command[MAX_STRING_LEN];
    int exit = 1;
    while (exit != 0){
        printf("\njackdewinter$ ");
        scanf("%s", &command); …
Run Code Online (Sandbox Code Playgroud)

c linux shell fork system-calls

1
推荐指数
1
解决办法
95
查看次数

标签 统计

c ×1

fork ×1

linux ×1

shell ×1

system-calls ×1