You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Shell执行bash -ic命令时进程停止或死循环问题

自定义Shell运行交互式bash异常问题

问题背景

个人出于兴趣开发的自定义Shell目前已实现管道等基础功能,常规运行表现正常,但仅在通过该自定义Shell运行bash程序时会出现崩溃或死循环异常。

异常复现规律

  • 当执行bash -ic <some_command>命令时,若系统默认Shell为开发的自定义Shell,直接启动实例后执行上述命令会触发无限循环
  • 若系统默认Shell为原生bash,先启动bash实例再在其中运行自定义Shell,之后执行bash -ic <some_command>时自定义Shell进程会被停止,直接返回至原生bash环境

最小可复现核心代码

以下为可复现核心问题的最小C语言示例代码:

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

void loop_pipe(char ***cmd) 
{
    pid_t pid, wpid;
    int status;

    pid = fork();
    if (pid == 0)
    {
        // Child process
        if (execvp((*cmd)[0],*cmd) == -1)
            perror("Command error");
        exit(EXIT_FAILURE);
    }
    else if (pid < 0)
    {
        // Error forking
        perror("Fork error");
    }
    else
    {
        // Parent process
        do {
            wpid = waitpid(pid, &status, WUNTRACED);
        } while (!WIFEXITED(status) && !WIFSIGNALED(status));
    }

}

int main()
{
    char *ls[] = {"bash", "-ic", "uname", NULL};
    char **cmd[] = {ls, NULL};

    while (1)
    {
        loop_pipe(cmd);
    }
}

实际运行现象

运行上述示例代码,命令执行完成后进程就会被停止,实际运行输出如下:

./a.out 
Linux

[4]+  Stopped                 ./a.out

已尝试排查操作与初步推测

  • 已尝试配置忽略SIGINT、SIGSTOP信号,但进程仍会被停止
  • 初步推测异常根源为bash与自定义Shell存在作业控制层面的冲突
  • 因项目包含多个源文件,完整代码已托管至GitHub平台,恳请协助定位问题原因、提供修复思路。

内容的提问来源于stack exchange,提问作者Liwinux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 13:12:27