问题标签 [sigchld]

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 回答
815 浏览

c - 错误:gcc 中“wstat”的类型冲突

我从这个文档中复制了这个程序:https ://docs.oracle.com/cd/E19455-01/806-4750/signals-7/index.html

当我运行时,gcc main.c我收到此错误:

据我了解wstat,定义了两次。这是否意味着文档不正确?以及如何解决?

0 投票
0 回答
39 浏览

c - 捕获 SIGCHLD 并替换终止的孩子

我正在分叉 n 个孩子并将每个孩子的 pid_t 保存在动态分配的表中(是的,我想这样做,因为我需要父进程拥有这些 id)。我的程序应该期待一个 SIGCHLD 信号,当它收到它时,它必须替换终止的子进程。所以,现在我必须用 pid_t 改变 child 的数组索引,并用一个新的 fork 替换它。

我的问题是,我怎么能真正做这样的事情,因为处理程序将被称为我的主程序“外部”,并且无法访问我的 pid 表。也许使表全局化并且只为父级初始化它?或者处理程序可以与 main 交互并以某种方式传递被释放和替换的 pid 值?

我可能会问,我是否应该首先创建这样一个表。我应该只使用 fork 的返回值而不是 parent 的表吗?在这种情况下,我将不得不创建一个if语句来检查每个 pid=fork() 而不是只有一个if语句将只输入 parentid 并且对于表中每个孩子的 id 都有一个循环。

编辑:我看不出我的代码有什么帮助,因为我想我解释了这个过程,但我描述的是。

0 投票
1 回答
190 浏览

c - 我可以在 C 中使用 sigaction 的标志 siginfo 和 SIGCHLD 来获得终止进程的信号 int 常量(如 SIGINT 或 SIGKILL)吗?

我试图弄清楚我是否可以使用传递给标志设置为 SA_SIGINFO 的 sigaction 的自定义 SIGCHLD 处理程序来获得终止子进程的信号。据我了解,si_status 应该根据 si_code 值报告退出值或信号值。

这是 SIGCHLD 处理程序的代码:

现在我的问题是,首先:可以这样做吗?

第二:如果是,我可以使用 si_status 和 si_code 吗?

0 投票
0 回答
209 浏览

c - 当间隔太小时定时器撤防

SIGCONT仅当间隔太小时,进程恢复后计时器似乎解除( )。我将 timer_create 与CLOCK_REALTIME.

我的 linux 发行版是 ubuntu 20.04.1

这是显示问题的代码

当我设置timeForTimer为 3 秒时,程序正常工作,2 秒它仍然工作,但 1 秒它不工作。编译:

这是较短的示例

在上面的例子中,只SIGSTOP出现了一个信号。发送SIGCONT命令kill -18 <pid>后没有更多SIGSTOP信号。看起来我的计时器被解除了。

0 投票
0 回答
92 浏览

unix - 如何在子进程终止之前读取子进程的 /proc/PID/maps

当子进程即将终止时,我试图通过读取其 proc 文件系统来读取子进程的内存使用情况(特别是 PSS)。

按照这个这个答案,我设法挂钩子进程的 SIGCHLD 信号并从 proc 文件系统读取一些数据。我发现它适用于大多数 proc 文件系统,但不适用于 /proc/PID/maps 和 /proc/PID/smaps。当发出 SIGCHLD 信号时,maps 和 smaps 看起来都已经是空的了。如果在发出 SIGCHLD 时读取地图和地图为时已晚,我还有什么替代方法?任何提示将不胜感激。谢谢。

以下是从我上面链接的第二个答案复制的示例代码。

0 投票
0 回答
11 浏览

sigaction - Handling Signal

Would someone please explain to me what this code does? In particular I don't understand the part with the signal handling.

I tried out the code and the result is:

X

D // after 2 seconds

B // after 2 seconds

C // after 4 seconds

A // after 4 seconds

E // after 4 seconds

0 投票
0 回答
32 浏览

c++ - c++ SIGCHLD创建错误的系统调用返回

这是我的代码(这只是一个例子)

我只是在“SIGCHLD”之前之后使用系统调用运行“pwd”命令,我得到了两个不同的结果:

在这两种情况下,命令都会正确执行。

为什么signal(SIGCHLD, SIG_IGN);会产生这个问题?有没有办法避免它?

0 投票
0 回答
33 浏览

python - Django runserver内存泄漏?

似乎不知从何而来,每当我调用我的 Django 模型的 url 时,无论是使用 ListView 还是 DetailView,它都会挂起,并且这样做时内存会飙升,我不得不杀死 runserver。我现在已经将此问题追溯到 subprocess._try_wait()。简单的解决方案似乎是引发 ChildProcessError。但这是源代码,我一直被告知不要乱用源代码。那么我应该如何解决这个问题呢?带装修师?那仍然必须进入源代码,不是吗?请指教。

另外,我注意到源代码中有一条关于 _try_wait() 之前的方法中的 python 错误的注释,即 _internal_poll()。请参阅 http://bugs.python.org/issue15756。然而,该错误在 2012 年被报告并一直修复,并且被认为与 1731717 相同,在 2007 年一直报告并在 Python 3.2 中修复。这个项目是我在 Python 3.9.9 上的第一个项目,所以我希望这个 bug 没有被重新引入。Django 是 3.2.9,操作系统是 Ubuntu 20.04。

此外,所有这些评论和错误报告都在谈论“SIGCLD 将被忽略”。但如果这是更好的方法,我该怎么做?我对C代码一无所知。

用 `sigaction(2)` 忽略 `SIGCHLD` 信号有什么用?

SIG_DFL 究竟是做什么的?

我该如何处理 SIGCHLD?

最后,我注意到这些来源都没有提到内存峰值。我不确定这是否有所作为。我假设内存泄漏 == 我所说的内存峰值。再次谢谢你。

0 投票
0 回答
32 浏览

linux - 当您从创建的线程之一 fork() 时会发生什么?

我试图了解以下如何在 Linux 中工作:

当您从创建的线程之一 fork() 时会发生什么?

  • 其他线程会发生什么?

当你从主线程(调用 fork 的线程/进程)fork() 时会发生什么?

  • 如果主线程/进程有多个线程在运行,会发生什么?所有线程是否也会重复?

在上述两种情况下,当分叉的子进程终止时,SIGCHLD 信号会发送到哪里?