问题标签 [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 回答
4880 浏览

linux - "no child process" error when calling waitpid twice

For some reason, I have to call waitpid twice on the same child process:

Calling the waitpid the first time and there are no errors:

The second time:

An error occurred: "No child process". Is there anything wrong with my code?

Update:

If the child process have already exited after or before my first calling of waitpid, which means the parent process has reaped this child process, the second calling of waitpid then causes errors. Is this correct?

0 投票
1 回答
92 浏览

c - 在 mini-shell 中挂起 2 管道函数时无法将信息存储在全局变量中

我正在编写一个 mini-shell,但在作业控制方面遇到了问题。
我无法检索主函数中的数据,甚至无法在 run_command 的底部检索数据。
我想知道如何在主目录中存储和成功检索信息。

0 投票
1 回答
812 浏览

c - fork() 和 waitpid 可能的输出

我的教科书给出了以下主要程序:

它询问可能的输出是什么,我找到了 3 个:

abcc:操作系统选择首先执行的子进程,并打印“a”。然后,操作系统暂停子进程并恢复父进程,打印“b”。然后父母必须等到孩子完成,孩子打印“c”,最后父母打印“c”。

bacc:操作系统选择首先运行的父进程,并打印“b”。然后父母必须等待孩子完成并打印“ac”。然后父母打印“c”。

acbc:操作系统选择子进程先运行直到完成,打印“ac”。然后父进程运行完成,打印“bc”。

但是,教科书中还列出了一个答案,bcac。我不明白这是怎么可能的,因为如果首先打印 b,那么父母必须等待孩子继续,然后打印“ac”,然后父母会打印“c”,给出我已经列出的 bacc . 是否有我遗漏的东西,或者说只有 3 个可能的输出是否正确?

0 投票
2 回答
1596 浏览

c - Ptrace/等待非孩子

-- 我用 pid 6841 运行了一个守护进程,并试图在 ptrace-attach 之后等待它

简而言之,我希望能够等待非子进程 - 欢迎任何其他程序。

0 投票
2 回答
773 浏览

c - waitpid 不工作 - 错误

我正在尝试制作一个在一个文件中运行 exec 然后等待它完成的 fork。如果子进程中的 exec 被信号终止,我想打印信号,如果程序运行时间太长,我想打印超时。

Testreport 是先前声明的 char * 文件名。waitpid 不工作。当我打印 waitpid 的值和产生的 errno 时,我分别得到 -1 和 14。我查了 errno 14,它是一个 EFAULT,这表明 status 的地址是无效的。怎么会这样?

0 投票
1 回答
482 浏览

c - 非子节点上的非根 ptrace/waitpid

这是我的 qn 的后续/修改:Ptrace/wait on a non child

如何 ptrace 或等待非子进程且等待的进程不是 root 用户。

我试图在同一个组中,仍然无法工作 [ 不允许操作 - 对非孩子进行 ptrace ]

0 投票
1 回答
793 浏览

c - 使用带有 waitpid 的分叉

是否有 3 个子进程和 1 个父进程?这两个不同的waitpid是做什么的,为什么会有两个?

waitpid 之后的第二个 printf 打印 3、5、6、34、52、61(不包括分号)。我不确定如何打印两位数。我知道第二个数字可能来自 while 循环中的 printf。

0 投票
1 回答
1798 浏览

c - 如何等待线程完成工作,c 中克隆创建的线程在哪里?

我尝试等待 main 函数,直到线程完成它们的工作。但是主函数完成它的工作并退出。我认为因为线程在变量中没有正确的指针/值。(计数和步骤)

有人知道在这种情况下如何正确使用 waitpid/wait 吗?

我的代码:

增量函数:

运行代码后得到的结果:

代码应该用两个线程增加一个变量。为了避免临界区问题,我应该使用信号量。但那是另一个练习。首先练习它使用 clone() 函数创建两个线程。我不明白,如果 clone() 的标志是错误的,或者我的代码是完全错误的。我是编程语言 C 的新手。

我花了过去 12 个小时用谷歌搜索。

我感谢每一个答案:)。

抱歉英语不好。

问候

0 投票
2 回答
7997 浏览

c - 这个 C 代码可以创建僵尸进程吗?

我想知道以下代码是否可以创建僵尸:

因此,父进程调用子进程的waitpid,如果子进程还没有退出,它会立即返回。所以,到目前为止,还没有僵尸出现。但是,如果孩子之前退出

令这将是一个僵尸呢?我实际上对此感到困惑。waitpid 是否应该是程序终止前的最后一行代码?任何帮助,将不胜感激。谢谢!

0 投票
2 回答
2076 浏览

c - 如何正确计算分叉子进程的实际数量?

前段时间我为自动 S/MIME 处理写了一个简单的 SMTP 门,现在它来测试。与邮件服务器一样,主进程为每个传入连接创建一个子进程。限制创建的子进程的数量是一个很好的做法——所以我做到了。

在重负载期间(同时来自许多客户端的许多连接),似乎没有正确计算子进程- 问题在于当子进程退出时减少计数器。几分钟后重负载计数器大于子进程的实际数量(即 5 分钟后它等于 14,但没有)。

我已经做了一些研究,但没有任何效果。所有僵尸进程都被收割,所以SIGCHLD处理似乎没问题。我认为这可能是一个同步问题,但是添加一个互斥锁并将变量类型更改为volatile sig_atomic_t(现在这样)并没有改变。信号屏蔽也不是问题,我尝试使用sigfillset(&act.sa_mask).

我注意到waitpid()有时会返回奇怪的 PID 值(非常大,如 172915914)。

问题和一些代码。

  1. 是否有可能其他进程(即。init)正在收获其中的一些?
  2. 进程退出后不能变成僵尸吗?可以自动收割吗?
  3. 如何解决?也许有更好的方法来计算它们?

分叉一个孩子main()

信号处理:

注意:所有以大写字母开头的函数(如Fork(),Close()Signal())与小写朋友 ( fork(),close()signal()更好的错误处理能力——所以我不必检查它们的返回状态。

注意 2:我在 Debian Testing( kernel v3.10.11) 下使用gcc 4.8.2.