调用system()后C程序未终止,Ubuntu下进程无法结束求助
解决Ubuntu中system("cat > 文件名")进程无法终止的问题
临时终止卡住的进程
如果当前程序正卡在cat命令无法退出,可通过以下方式终止进程:
- 直接在当前终端按**
Ctrl + C**,发送中断信号终止cat进程,即可回到命令行提示符 - 若快捷键无效,打开新终端,执行
ps aux | grep cat找到该cat进程的PID,再用kill <PID>终止;或者直接执行pkill cat批量终止所有cat进程 - 如果进程在后台运行,用
jobs查看任务编号,再执行kill %<任务编号>(比如kill %1)
问题根源与代码修复
你的代码里system("cat > 文件名")会卡住,是因为cat命令默认会从标准输入读取内容,直到收到EOF(Ctrl + D)才会退出,所以system调用会一直等待输入,导致进程无法自动终止。
可以用以下几种方式修复代码,避免后续再出现这个问题:
方法1:让cat读取空输入
修改sprintf的命令,让cat读取/dev/null(空设备)的内容,执行后直接退出:
sprintf(command, "cat /dev/null > %s", filename);
方法2:用C标准库创建文件(推荐)
直接使用C标准库的文件操作函数,比调用system更安全、高效,也不会出现卡住的问题:
#include <stdio.h> #include <stdlib.h> int main() { char filename[50]; printf("Enter the filename: "); scanf("%s", filename); // 以写入模式创建文件 FILE *file = fopen(filename, "w"); if (file == NULL) { perror("Failed to create file"); return 1; } fclose(file); printf("File '%s' created successfully.\n", filename); return 0; }
方法3:用touch命令创建空文件
如果一定要用system调用,改用touch命令,它专门用来创建空文件或更新文件时间戳,执行后会立即退出:
sprintf(command, "touch %s", filename);
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

