- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习 fork 和 exec,并使用 fork 和 execlp 创建多个子进程,我在子进程中所做的只是让它休眠。基本上我只希望我所有的 child 都活着。但是,一旦我启动创建进程的 monitor.cpp,所有子进程都会立即退出,并且它们会失效!
Monitor which forks multiple children
#include <iostream>
#include <thread>
#include <chrono>
#include <string>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
for(size_t i=0; i<std::stoi(argv[1]) ; ++i)
{
int pid = fork();
if(pid == 0)
{
execlp("child", "child", std::string(std::to_string(i)).c_str(), (char *)0);
std::cout << "child exiting " << std::endl;
exit(1);
}
else if(pid > 0)
{
std::cout <<"child started with " << pid << std::endl;
}
else
{
std::cout << "fork failed" << std::endl;
}
}
while(true)
{
std::this_thread::sleep_for(std::chrono::seconds(100000));
}
return 0;
}
子码
#include <iostream>
#include <thread>
#include <chrono>
int main(int argc, char* argv[])
{
std::cout << " child started with id " << argv[1] << std::endl;
std::cout <<"child sleeping " << argv[1] << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1000));
std::cout << "child exiting " << argv[1] << std::endl;
return 0;
}
输出:
child started with 1834
child started with 1835
child exiting
child started with 1836
child exiting
child started with 1837
child started with 1838
child started with 1839
child exiting
child started with 1840
child started with 1841
child exiting
child started with 1842
child started with 1843
child exiting
child exiting
child exiting
child exiting
child exiting
child exiting
ps -ef 将我所有的子进程显示为 Defunct,即使我的父进程还活着。
你能解释一下我错过了什么吗?
最佳答案
来自“execlp”手册页:
The exec() functions only return if an error has occurred. The return value is -1, and errno is set to indicate the error.
由于 "child exiting"
被打印在两个地方,如果它正在退出并不明显。您需要检查它的返回值和 errno
。
关于c++ - 子进程在 fork 和 exec 后变为 Defunct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57543592/
kill - does it kill the process right away? 我找到了答案,并为 SIGCHLD 设置了一个信号处理程序,并在该处理程序中引入了 wait。这样,无论何时父进
我一直在拼命地试图从父进程中杀死一个子进程。 我试过:1. kill -15 pid kill -shotgun pid kill -9 pid 他们都决定将子进程写成:在 linux 中使用 ps
如果没有运行,我当前的 cronjob 将启动 beaver: #!/bin/bash pgrep -l -x beaver || /usr/sbin/service beaver start 我想修
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 社区在 7 个月前 审
我执行从主控主机到从属主机的 ZFS 远程复制,其中我有一个在主控主机上运行的 Perl 脚本。 对于每个文件系统,它通过 ssh 连接到远程主机并以监听模式启动 mbuffer,然后脚本继续执行并发
我在我的应用程序中显示了一些动画自定义画家进度条,它显示了一些错误 Error: The following assertion was thrown while notifying listener
我有一个以僵尸进程运行的程序。我想调试它。但是我遇到了 gdb 错误。 mobile:/usr/local/ads5/bin# ps axf | grep ads_resolver 5583 pts
希望在 C++ 中 fork 一个不会挂起其父进程的进程 - 它的父进程是守护进程并且必须保持运行。如果我在 fork 进程上等待(), fork 的 execl 不会失效 - 但是 - 它也会挂起应
我正在开发一个使用 fork() 执行各种任务的程序.我正在启动程序,一切正常。我观察到一段时间后(1 天)我被 淹没了进程,超过 600 700 ... 其中 max forks 设置为 500。
我制作了一个 PHP 脚本,它读取一些数据并使用 pctnl_fork 启动一个新进程来处理数据。子进程完成后,它们将保留为进程。 ps aux 向我显示进程列表,例如 demo 3222
我有一些 python 多处理代码,父进程启动了一堆子工作进程,然后在一段时间后终止它们: from multiprocessing import Process nWorkers = 10 curW
僵尸进程和死进程有区别吗?我找到了维基百科文章,其中写道这两个是相同的。在那种情况下,为什么需要为同一过程设置 2 个不同的术语: https://en.wikipedia.org/wiki/Zomb
错误会在两个区域引发(并且应用程序卡住(当应用程序最小化,单击电话后退按钮或在flutter应用程序顶部运行另一个应用程序时。flutter版本:1.20.2(以前的版本没有此问题):这两个功能是:
我有超过 30 个进程 '[avconv] '(我在脚本中有一个错误),使用这个命令我找到了这些进程: Ps aux | grep '\[avconv\] ' 但我不知道如何终止这些进程,有人知道如何
执行以下命令来终止 Linux 系统上的 java 进程。 ps -ef | java | grep | grep -v grep | grep -v awk '{print $2}'| xargsk
我正在使用 cron 运行以下脚本,在/etc/cron.d/mycron 我有以下内容: */10 * * * * MyUserThatNeedsToRunTheScript /backup/ssh
我正在学习 fork 和 exec,并使用 fork 和 execlp 创建多个子进程,我在子进程中所做的只是让它休眠。基本上我只希望我所有的 child 都活着。但是,一旦我启动创建进程的 moni
我们先来看看现象 Nodejs 代码: const cp = require('child_process'); var ls = cp.spawn('ls', ['/']); ls.stdout.o
这里有很多帖子(例如 https://unix.stackexchange.com/questions/217507/zombies-in-bash)展示了如何在 bash 或 c 中创建僵尸进程。我
文件协议(protocol)是否有效失效? 如果内联网服务器可以生成如下链接,那将对我非常有用 由于它是一个内部 Intranet 应用程序,服务器和用户的系统共享对同一文件存储的访问,因此这是明
我是一名优秀的程序员,十分优秀!