- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 fork 一个进程并使用 execl
运行 wc
命令。现在,在正确的参数下,它运行良好,但是当我给出错误的文件名时,它会失败,但在这两种情况下,返回值WEXITSTATUS(状态)
始终为 0。
我相信我所做的事情有问题,但我不确定问题是什么。阅读手册页和 Google 建议我应该根据状态代码获取正确的值。
这是我的代码:
#include <iostream>
#include <unistd.h>
int main(int argc, const char * argv[])
{
pid_t pid = fork();
if(pid <0){
printf("error condition");
} else if(pid == 0) {
printf("child process");
execl("/usr/bin/wc", "wc", "-l", "/Users/gabbi/learning/test/xyz.st",NULL);
printf("this happened");
} else {
int status;
wait(&status);
if( WIFEXITED( status ) ) {
std::cout << "Child terminated normally" << std::endl;
printf("exit status is %d",WEXITSTATUS(status));
return 0;
} else {
}
}
}
最佳答案
如果您向 execl()
提供不存在的文件名作为第一个参数,则会失败。如果发生这种情况,程序将离开而不返回任何指定值。因此返回默认值0
。
您可以像这样修复示例:
#include <errno.h>
...
int main(int argc, const char * argv[])
{
pid_t pid = fork();
if(pid <0){
printf("error condition");
} else if(pid == 0) {
printf("child process");
execl(...); /* In case exec succeeds it never returns. */
perror("execl() failed");
return errno; /* In case exec fails return something different then 0. */
}
...
关于c++ - WEXITSTATUS 始终返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19153046/
我正在尝试弄清楚以下代码的作用: int main() { int value = 3; if (fork() != 0) { wait(&value)
以下代码将等待子进程完成,然后打印其返回码。 int status; wait(&status); cout << "return code = " << WEXITSTATUS(status) <<
我正在 fork 一个进程并使用 execl 运行 wc 命令。现在,在正确的参数下,它运行良好,但是当我给出错误的文件名时,它会失败,但在这两种情况下,返回值WEXITSTATUS(状态)始终为 0
我正在尝试了解 WEXITSTATUS(status) 的工作原理。我遇到过一段代码,其中 WEXITSTATUS(status) 的返回值被添加到一个变量中。 这是片段: waitpid(-1, &
我正在尝试使用 popen() 获取子进程的存在状态。 案例一:调用函数时shell命令返回错误。这按预期工作。 func("du -sh _invalid_file_"); 输出: du: cann
我有下面的代码,但我需要 exit(status) 返回一个 float ,但 WEXITSTATUS 没有收到 float ,因为状态必须是 int,那么什么是请问解决办法? scanf("%f%f
我读了这个code在unix系统函数的实现中(问题8.22): int status; if (wait(&status) > 0) { if
当执行这段操作系统代码时,我收到信息“Exited with value 255”。我通过键盘收到命令,并且我知道该字符串是正确的。当我收到错误消息时,编程不显示(例如)键盘收到的 ls -l
我正在尝试获取子进程的退出代码。在 Linux 和 FreeBSD 上,我可以这样做: [0] [ishpeck@kiyoshi /tmp]$ uname FreeBSD [0] [ishpeck@k
我有一个命令和一些输入,在命令行上运行时将返回错误,相关错误代码为 1: $ foo bar [some useful error message...] $ echo $? 1 我正在尝试使用 wa
查看 this post我不明白凯勒姆的回答。我有两个问题。 1)她/他想要使用变量“count”来计算从 fork 产生的进程总数(即子孙等+原始进程的总数)。我看到她/他首先在父进程中将 coun
我有下面的辅助函数,用于在 posix 系统上执行命令并获取返回值。我曾经使用 popen , 但不可能通过 popen 获取应用程序的返回码如果它在 popen 之前运行并退出/pclose有机会完
我正在开发一个使用 fork() exec() wait() 的 C 程序。第一个进程有以下代码: int main(int argc, const char * argv[]) { // inser
当谈到按位数学时,我只是一个新手 - 如果这甚至是正确的术语 - 并且正在寻找一种更好的方法来对 int 求和返回代码进行逻辑处理(这是各种 Unix 程序的标准)。 IE。返回码可以是 1,2,4,
很抱歉,我不熟悉 fork() 的机制,所以答案可能很简单。详细说明我的问题,如果我多次运行 fork(),比如使用 for 循环,并且我使用 WEXITSTATUS(status) 从 child
下面的代码片段可以编译, #include #include #include int main() { int ret = 0xFFFF; std::cout #include #
我在子进程中以 -1 退出,但父进程选择了 255。有没有办法让 parent 识别-1?这是我的代码 pid = fork(); // if fork fails if (pid < 0
我正在使用以下代码来使用父/子运行一些命令: int nStatus = 0; int nRet = 0; pid_t pid = -1; char *envp[] = { "
据我所知,如果 waitpid 返回 -1 那么它就是错误条件。如何从 WEXITSTATUS(childStatus) 中的子进程获得成功 (EXIT_SUCCUSS)? waitpid 中的 ch
我正在为大学做一个练习,我必须在退出时返回一个值,这个值实际上是某种东西的计数。这可能高于 255(exit() 无法处理),但老师建议使用计数永远不会超过该值的测试数据。 在这之后,我需要处理这个计
我是一名优秀的程序员,十分优秀!