c - 调用 system() 后子进程挂起
问题描述
问题是父进程或子进程都没有退出。子进程打印它的消息,然后程序挂起。可能会卡在 system() 因为当 system() 调用被删除时不会发生这种情况。unhide_string() 过滤掉非字母并且 args 在别处定义。传递给 get_page() 的命令“cmd”是有效的。
int get_page(char* cmd) {
system(cmd);
return 0;
}
int main() {
char* args_s = unhide_string(args);
if (args_s == NULL) {
printf("Please run me again :)\n");
}
if (fork() == 0) {
get_page(args_s);
printf("Guess what I did :)\n");
}
free(args_s);
return 0;
}
解决方案
通过让父进程等待子进程完成来修复。这允许程序正确终止。
修改后的分叉代码:
if (fork() == 0) {
get_page(args_s);
printf("Guess what I did :)\n");
} else {
waitpid(-1, NULL, 0);
}
推荐阅读
- angular - Angular 8 和异步 @Input
- javascript - 无法在 eventReceived 事件中为 Angular 中的事件设置 ID
- javascript - 更新 Firebase 数据的 JavaScript 函数覆盖当前数据,即使我的循环检查空/空值
- r - PCSE结果解读
- snowflake-cloud-data-platform - 将数据从 Blob 加载到 Snowflake 表
- angular - Angular:为什么我的 formArray 不验证或更新?
- nestjs - 密码以纯文本形式存储在数据库中
- javascript - “使用者”功能在 GitHub 上如何工作?
- php - PHP Startup: Unable to load dynamic library 'php_mongodb.dll'
- html - 使用 Angular 在 div 中创建 div