我有一个C程序使用system
调用外部命令,但是我不知道为什么外部程序偶尔会崩溃,导致整个程序崩溃,反正我可以即使外部程序崩溃也能防止我的程序崩溃?
编辑1: 这是一些代码,这是一个大项目的一部分,从代码中可以看出,最初他们使用 scp 将文件传输到服务器/从服务器传输文件,由于某些限制,我编写了我们自己的 scp 版本,称为 scpcontract 和 scpexpand,然后我把它代入函数,然后整个程序开始偶尔崩溃,崩溃的输出是报告“KEYERROR”并且没有回溯(我无法打印它们,我不知道为什么),但是当我查看内核环消息,同时看到一个名为“expand.so”的程序崩溃,我不确定这个“expand.so”是什么,因为我的项目中没有这个文件。
struct context {
const char *path;
const char *user_buf;
int user_buf_size;
};
#define execute(fmt, ...) ({ \
char buf[8196]; \
snprintf(buf, 8173, fmt, ##__VA_ARGS__); \
strcat(buf, ">/dev/null 2>/dev/null"); \
system(buf); \
})
int contract(struct context *ctx) {
int res = execute("scpcontract %s", ctx->path);
return res;
}
int expand(struct context *ctx) {
return execute("scpexpand %s", ctx->path);
}
最佳答案
当您通过 system()
调用另一个程序时,会生成一个新进程,并使用您提供的命令在其中执行一个 shell。
通常,在大多数操作系统上,子进程崩溃不会直接导致父进程崩溃。
您的父进程(调用 system()
)可能有一个错误,当子进程因某种原因失败时,它会崩溃。您需要对此进行调试。
关于c - 如何防止外部程序引起的C程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36955324/