我对Linux API sem_unlink()有点困惑,主要是在什么时候或为什么调用它。我在Windows中使用信号量已经很多年了。在Windows中,一旦关闭了命名信号量的最后一个句柄,系统就会删除底层内核对象。但是在Linux中,开发人员需要通过调用sem_unlink()来删除内核对象。如果不这样做,内核对象将保留在/dev/shm文件夹中。
我遇到的问题是,如果进程A调用sem_unlink(),而进程B锁定了信号量,它会立即销毁信号量,现在当进程C出现时,进程B不再受信号量的“保护”。更重要的是,手册页充其量也是令人困惑的:
“信号量名称将立即删除。一旦打开信号量的所有其他进程将其
如何从C执行/打开/运行另一个程序,而不是阻止它,而是让它同时运行。然后我想做一些像服务器/客户端这样的测试,如果已经完成了,我只想杀死/关闭这个程序。我读过
system() or execv()
但是,第一种似乎阻碍了等待结果,第二种似乎只在Linux上工作?在最好的情况下,我希望有跨平台或最低的MacOS/Windows/Linux(Ubuntu)工作解决方案。我也需要关闭这个以前打开的程序,当我不再需要它。
有时,我们需要对来自进程外部的一些条件进行顺序处理。对于这种情况,我们可以声明一些控制信号,例如:
Architecture ...
Signal C : std_logic;
begin
Process(SomeInputs)
begin
C <= '1';
end Process;
Process(Clock)
Variable Counter : Integer := 0;
begin
if (Clock'Event and Clock = '1') then
if C = '1' then
我最近完成了“Unix环境中的高级编程”(第三版)第10节(信号),我遇到了一段我不完全理解的代码:
#include "apue.h"
static volatile sig_atomic_t sigflag; /* set nonzero by sig handler */
static sigset_t newmask, oldmask, zeromask;
static void
sig_usr(int signo) /* one signal handler for SIGUSR1 and SIGUSR2 */
{
sigflag = 1;
}
voi