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

调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:19:57