c - execlp系统调用后如何打印行
问题描述
我知道当 execlp 系统调用成功执行时,它不会返回到调用进程。有什么方法可以在调用 execlp 之后返回并打印该行。
int main()
{
pid_t pid;
/* fork a child process */
pid = fork();
if (pid < 0)
{
/* error occurred */
fprintf(stderr, "Fork Failed");
return 1;
}
else if (pid == 0)
{
/* child process */
execlp("/bin/ls","ls", "-lrth", NULL);
printf("In Child after execlp call\n");
}
else
{
/* parent process */
/* parent will wait for the child to complete */
wait(NULL);
printf("Child Complete");
}
return 0;
}
我想看到打印“在 execlp 调用后的孩子”。如何让它发生。
解决方案
关于:
execlp("/bin/ls","ls", "-lrth", NULL);
printf("In Child after execlp call\n");
功能:execlp()
如果成功,则永不返回。ls
此外,当(在这种情况下)退出时,子进程不再存在。
所以正确的做法是处理调用execlp()
失败的情况。在失败的情况下,正确的代码将是:
perror( "execlp failed" );
exit( EXIT_FAILURE );
注意:调用perror()
输出您的错误消息和系统认为错误发生的原因stderr
推荐阅读
- java - 仅使用 Springboot 和 MongoDB 比较 YYYY-MM 部分日期
- pine-script - Strategy.long 后第二次交叉,Pine 脚本
- c# - 在长时间运行的工作人员服务中创建 HttpClient 对象的建议方法是什么
- bots - 对不和谐机器人的编码感到困惑
- reactjs - 在不渲染父组件 React js 的情况下重新渲染子组件
- javascript - forEach - 在 Redux 中向 action.data 添加键/值 - console.log 有效,但 Redux 状态未更新
- ios - (iOS)无法使用 AVURLAsset 和 AVAsset 阅读器从 RAM 而不是文件读取视频帧
- excel - 使用填充功能
- python - anaconda-navigator 和 pip install 抛出(肯定是嵌套的)错误
- flutter - Flutter Checkbox 在 AlertDialog 中不起作用