问题标签 [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 投票
1 回答
1443 浏览

c - 使用带有 waitpid pselect fork sigaction 的处理程序清理子进程

我有一个将消息接收到套接字的服务器,并且对于接收到的每条消息,执行一个 fork exec。这部分似乎工作正常。

但是我需要在非阻塞模式下执行此操作,因此我创建了一个处理程序来正确清理所有终止的子进程waitpid()(如论坛中的许多主题中所述)。

问题是这个处理程序对我的pselect命令产生了一个中断的系统调用,它通过以下消息停止程序:
"select(): Interrupted system call"

我在“Preventing race conditions”之类的论坛上找到了一些关于这个问题的解释,所以我尝试用它sigprocmask()来阻止几个信号,但它没有奏效。

我确信这是一个微不足道的问题,但这是我第一次使用这种程序。

我需要一些帮助。提前致谢。

这是程序:

0 投票
1 回答
318 浏览

c - 子进程中的变量修改

我正在研究 Bryant 和 O'Hallaron 的Computer Systems, A Programmer's Perspective. 练习 8.16 要求一个程序的输出,比如(我改变了它,因为他们使用了一个你可以在他们的网站上下载的头文件):

我回答“counter = 1”是因为父进程等待其子进程终止,然后递增计数器。但孩子首先减少它。然而,当我测试程序时,我发现正确的答案是“counter = 2”。子进程和父进程中的变量“计数器”是否不同?如果不是,那为什么答案是 2?

0 投票
1 回答
961 浏览

c++ - 子进程的返回值

我是 and 的新手forkexec我尝试了以下程序。

方案一:

方案二:

我运行第一个程序,输出是“子进程以 256 退出”。为什么结果256不是1? 如果我更改exit(1)exit(2),结果变为512,这是为什么呢?只有当我返回 0 时它才有效。

0 投票
1 回答
874 浏览

c - C - 等待一个孩子终止

我正在循环中创建多个子进程。每个孩子都会做这件事,他们中的任何一个人都可以先结束。(不确定是否相关,但:每个孩子都有一个孙子)

当一个子进程完成后,我如何等待任何子进程终止并停止其他进程?

0 投票
1 回答
687 浏览

c - waitpid not receiving exit status when child executes execvp

I am trying to create a shell like program . Wrote a sample snippet program to see the execution of ls | wc.

In the sample program the main process creates a childprocess for the execution of each command(using execvp) and passes the output using pipes.

But when I execute the program the waitpid for the second fork() (pid2) is getting block. The program is not proceeding when the waitpid is present.

I get the output if I comment the second waitpid (the child process is running in the background and is printing the output after the main program exits)

What is the issue in the usage of waitpid? Why is it the first waitpid working but not the second waitpid?

Note:1) parse is a library which takes in the input typed and returns each command as a linked list with args and necesary data. Parse is working fine

0 投票
0 回答
286 浏览

c++ - 使用 waitpid() 仅获取状态信息

对于我的学校作业,我的教授希望我存储我用我的程序创建的后台进程的状态,并存储在进程表中,每个进程条目要么是“进行中”,要么是“完成”。要检查一个过程是否已完成(终止),我的教授需要我使用 waitpid()来执行此操作。

我不知道如何做到这一点,因为如果我循环遍历我在后台创建的所有进程(一堆 sleep())并且我通过检查 waitpid() 是否与每个进程的 id 来检查每个进程作为 waitpid() 的参数,它返回的不是 -1(不是错误),那么当我真的只想知道该进程是否终止时,每个进程都会跳转到前台。

教授的原始问题:

BACKJOBS:打印后台作业列表及其当前状态的命令。此功能类似于使用 tcsh 时的作业命令。每个作业的当前状态(即,正在进行或已完成)可以通过使用 waitpid 系统调用来确定(有关更多信息,请参见 man waitpid)。报告错误的调用将是那些已经完成的调用,因此它们的状态将是“完成”。未导致错误的调用将具有“进行中”状态。

0 投票
1 回答
5087 浏览

c - 无法使用 waitid() 和 P_PID 进行编译

我是 Linux 新手。我正在尝试使用 waitid() 来等待子进程。当我尝试使用 gcc 编译包含以下行的文件时:

产生了以下错误:

我包括以下库:

我错过了什么?

另一个问题是我如何使用WIFSIGNALED()从 type 中检索信息siginfo_t

0 投票
1 回答
141 浏览

c - execve() 仅在第一个循环中返回错误

我已经对此感到困惑了一段时间,现在我可以使用一些帮助。我正在尝试创建一个循环,该循环将分叉一个子进程并通过 execve() 调用“echo hello”。

起初,代码在第一次运行时失败,而在每次后续运行时都成功。现在,在清理它以在这里展示之后,它根本不会成功 - 我得到的只是错误!x 10. 我一定是进一步破坏了什么,我不知道是什么。

这只是我在这个网站上的第二个问题,所以如果您有任何改进我的问题/建设性批评的建议,请分享!谢谢你。

0 投票
1 回答
29 浏览

c - 如果 fopen() 存在,waitpid() 返回 -1

我想知道为什么在存在时waitpid()返回-1 。fopen()

pid2pid等于上例中的 -1,但如果我消除它,它会变成与 (子进程号) 相同的数字fopen()。感谢您的澄清!

0 投票
1 回答
202 浏览

ruby - 如何等待在 gnome-terminal > 3.8 中运行的进程

GNOME 开发人员在 3.8 版左右disable-factorygnome-terminal中删除了选项。虽然在wheezy中有旧版本,但在jessie中有 3.14。

当使用该选项时,gnome-terminal (<3.8) 一直等到运行它的东西结束。在较新的版本中,gnome-terminal在窗口启动后立即返回。更糟糕的是,在窗口中运行的进程将主 gnome-terminal 进程作为父进程,所以我不能waitpid为它(因为它只为子进程保留)。

我有一个 Ruby 脚本,它在 gnome-terminal 中启动一个工具,并且必须等到该工具的进程结束。任何人都知道如何在给定PID的进程的循环检查状态上消耗太多资源而不消耗太多资源?

必须可以在 Ruby 或 Bash 中完成。