自定义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
相关产品推荐
相关产品推荐

