问题标签 [waitpid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4326 浏览

perl - 为什么我从 Perl 的 system() 开始的进程不是子进程?

Perl 的 system() 启动一个进程,但打破了父/子关系?

测试.pl:

测试.sh:

当我运行 test.pl 时,它会找到并打印出 test.sh 的正确 pid。但是 waitpid() 返回 -1 并且 test.pl 退出。test.pl 存在后,test.sh 仍在运行。

看起来 test.sh 不是 test.pl 的子级,它会破坏 waitpid()。为什么会发生这种情况以及如何使 system() 行为?那是因为 Perl 会自动清除孩子吗?如果是,我该如何解决明确等待孩子的一般任务?

更新:

下面的答案建议使用 fork/exec。最初的问题是这样的:

  1. 从 Perl 脚本,运行启动服务的命令行实用程序。实用程序退出,但服务保留。

  2. 一段时间后,找到该服务的 pid 并等待它。

fork/exec 没有解决这个问题,尽管它解决了这个问题。

0 投票
2 回答
4149 浏览

c++ - 生成的子退出状态 = 127

我使用 posix_spawnp 执行不同的进程,并检查状态(使用 waitpid)以确保正确创建了孩子

起初,这可以正确执行,我收到以下消息:

等待:PID 15911 | 状态 0 孩子以 RC=0 退出

多次执行同一个进程后,子进程开始退出,状态为 127。

等待:PID 15947 | 状态 32512 孩子以 RC=127 退出

发生这种情况后,我无法让孩子再次产卵。我将上面给出的代码部分包含在一个 for 循环中,但它不会正确生成。如果我重新启动父进程,它会工作一段时间,但同样的问题会在一段时间后再次出现。

我在这里做错了什么?

0 投票
4 回答
16539 浏览

c - 用于 WIFSIGNALED、WIFSTOPPED、WIFCONTINUED 的 C 语言测试用例

我正在使用 waitpid() 和 signal() 并且我正在寻找可靠的测试用例来返回 WIFSIGNALED(status) = WIFSTOPPED(status) = WIFCONTINUED (status) = true 但找不到任何...

请告诉我如何确保那些返回 true 以便我可以调试我的代码?

此外,关于我应该使用 signal() 捕获哪些信号来测试这些宏的一些提示会很有帮助......

0 投票
1 回答
721 浏览

fork - 哪些系统不支持 waitpid 的 WNOHANG 选项?

我有一个用于管理子进程的库,该库依赖于将 POSIX WNOHANG 选项传递给 waitpid 以对进程执行非阻塞等待。据说并不是所有的系统都支持这个选项,但是我已经有一段时间没有研究过这些系统了。哪些系统不支持此选项?我想知道以便我可以尝试为这些系统找到解决方法,或者我可以决定不针对这些系统。

0 投票
3 回答
1018 浏览

c - 为什么取消引用 (char*)0 的 Linux 程序并不总是出现段错误?

我正在测试旨在检测子进程何时出现段错误的代码。当这段代码并不总是段错误时,想象一下我的惊讶:

我在 Debian Linux 2.6.26 内核下运行;ksh93我的外壳是来自 Debian软件包的 AT&T ksh,版本 M 93s+ 2008-01-31。有时这个程序会出现段错误,但否则它只是以非零退出状态但没有消息而静默终止。我的信号检测程序报告以下内容:

在 pure 下运行ksh表明 segfault 也很少见:

有趣的是,bash每次都能正确检测到段错误

我有两个问题:

  1. 谁能解释这种行为?

  2. 任何人都可以建议一个简单的 C 程序,它会在每次执行时可靠地发生段错误吗?我也尝试过kill(getpid(), SIGSEGV),但我得到了类似的结果。


编辑:jbcreix 有答案:我的段错误检测器坏了。我被愚弄了,因为ksh有同样的问题。我尝试过bash并且bash每次都做对了。

我的错误是我传递WNOHANGwaitpid(),我应该传递零。我不知道我当时在想什么!有人想知道 是怎么回事ksh,但这是一个单独的问题。

0 投票
4 回答
5446 浏览

perl - 为什么 Perl 中的 waitpid 会返回错误的退出代码?

我从 waitpid 得到错误的退出代码,我不知道为什么。有人可以给我一些想法吗?

我在这里做什么:

  1. 我开始我的孩子进程open2
  2. 然后我等待它完成waitpid
  3. 使用获取退出代码$?

无论我从子进程返回什么,它总是返回 -1。我用 VS 调试器检查我的程序返回的退出代码为 0。VS 说这样的话:

我确保pids匹配。

有任何想法吗?

0 投票
1 回答
10615 浏览

c - 确定终止进程的pid

我试图弄清楚发送 SIGCHLD 信号的进程的 pid 是什么,我想在为 SIGCHLD 创建的信号处理程序中执行此操作。我该怎么做?我正在努力:

因为我想等待任何产生的子进程。

0 投票
3 回答
7340 浏览

c - waitpid 是否为已经退出的子进程产生有效的状态信息?

如果我fork是子进程,并且子进程在父调用之前退出waitpid,那么设置的退出状态信息是否waitpid仍然有效?如果是,什么时候变得无效;即,如何确保我可以调用waitpid子 pid 并在任意时间后继续获取有效的退出状态信息,以及如何“清理”(告诉操作系统我不再对退出感兴趣已完成子进程的状态信息)?

我在玩下面的代码,似乎退出状态信息在孩子完成后至少几秒钟内有效,但我不知道多久或如何通知操作系统我不会再次调用waitpid

0 投票
2 回答
5771 浏览

perl - 为什么是 Perl 的 $?为分叉进程的退出代码返回错误的值?

考虑这个fork()的简单示例,然后在 Perl 中等待孩子死去:

在 Solaris 10 上运行脚本,我得到以下结果:

我怀疑 的值正在向上移动,因为当我exit(2)在孩子中这样做时,输出变为512.

我似乎在 perl 的waitpid中找不到这个记录。这是我系统上的错误还是我做错了什么?

0 投票
1 回答
3582 浏览

c - 使用 waitpid() 后,我对 WIFSIGNALED()/WTERMSIG() 宏有疑问

在这段代码中,我从命令行启动一个程序,当它从不同于 SIGTERM(正常结束的信号)的信号关闭时,我的代码应该重新启动从命令行传递的初始程序。但事实并非如此,事实上我的代码从不重新启动程序说它已正确终止。在实践中我的条件“if(WTERMSIG(status)!=SIGTERM)”工作不好,为什么??????:'(

这是我的代码: