Articles of ipc

Nginx和后端服务器之间的IPC机制是什么?

Nginx将请求传输到其他后端服务器,如Thin(Ruby服务器)或Node.js服务器或Tomcat,那么它们之间的IPC机制是什么? 共享内存? 套接字(即使在同一台机器)? pipe? 标准IO? (对于CGI或FastCGI,它是) 或者是其他东西?

守护进程不与notify-send进行交互

这是我的代码 #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <errno.h> #include <unistd.h> #include <syslog.h> #include <string.h> #include <iostream> int main(int argc, char *argv[]) { pid_t pid, sid; int sec = 10; pid = fork(); if (pid < 0) { perror("fork"); exit(EXIT_FAILURE); } if (pid > 0) { std::cout << "Running with PID: […]

在Linux中写入命名pipe道的最好,最安全的方法是什么?

在Linux中写入命名pipe道的最好,最安全的方法是什么? 或者,我怎样才能使命名pipe道安全? 以下是我如何使用PHP写入到Linux上的pipe道: $con = fopen("/tmp/myFIFO", "w"); fwrite($con, "UP\n"); fclose($con); 我希望使它更安全。 这是我如何创build在C: int pc; char mode[] = "0777"; int i = strtol(mode, 0, 8); pc = mkfifo(FIFO, 0); if(pc < 0) { printf("Failed in creating a pipe\n"); printf("Exiting…\n"); exit(1); } else { printf("Success in Creating Pipe\n"); chmod("/tmp/myFIFO", i); }

共享内存使用信号量进行安全写入

下面的Server代码把一个string转换成共享内存variables。 客户端代码显示共享内存中可用的string。 完整的代码: 可在这个github链接 Server.c int main(int argc, char *argv[]) { /* code to create posix shared memory and posix named semaphore */ /* critical section start */ snprintf(shared_msg->content, MAX_MSG_LENGTH, "%s", argv[1]); /* critical section end */ } Client.c int main(int argc, char *argv[]) { /* code to open posix shared memory and posix named […]

作业感知shell vs作业不知道程序的shell执行

当我读APUE v3时,更具体地说,我发现自己无法掌握一些东西。 首先,我们假设我在UNIX shell中运行下列pipe道程序: cat /etc/passwd | grep -i alex | awk -F : '{print $3}' | less 在第一个例子中,让我们假设我正在使用一个不知道shell的工作(sh) 这本书解释说,在这种情况下,最终ps -o pid,ppid,pgid,comm会是这样的(假设shell的pid是10,ppid是5) PID PPID PGID COMM 10 5 10 sh 11 10 10 less 12 11 10 cat /etc/passwd 13 11 10 grep -i alex 14 11 10 awk -F : '{print $3}' 在第二个例子中,让我们假设我们正在使用作业感知shell(bash): PID […]

java线程和系统线程之间有什么关系?

最近,我研究了Android系统中的Handler类。 在我看来, Handler机制是Thread运行一个死循环,并在该死循环中从队列中重复检索消息,然后将消息发送到目标处理程序。 但是,当队列中没有消息时,线程必须等待或阻塞指定的时间,这可以减lessCPU时间。 我的理解是,为了在指定的时间内等待或阻塞Thread ,它使用linux epoll函数在本地层等待指定的时间。 当有消息在队列中时,它使用一个linuxpipe道来唤醒线程。 所以我的困惑是为什么Android系统使用Linux进程通信function(IPC)来控制Java Thread等待或唤醒? Java Thread和系统线程或者linux线程之间有什么关系 ? 换句话说,我真正想知道的是为什么android使用linux ipc函数来控制java线程来实现用于在java线程之间发送消息的所谓的Handler。 这里是Android平台的相关代码 public static void loop() { final Looper me = myLooper(); if (me == null) { throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread."); } final MessageQueue queue = me.mQueue; // Make sure the identity of this thread […]

谁可以在Linux共享共享内存?

我正在加强学生代码执行的沙箱。 我觉得我很满意,学生们不能共享文件系统或信号上的数据,因为我发现明确的规则指出这些数据,他们作为不同的非特权用户执行。 然而,我正在很难查看文档来确定什么时候创build共享内存(或更一般的IPC – 队列或信号量),谁可以看到。 如果你创build共享内存,任何人都可以在同一台机器上打开它,或者有什么办法来控制它? 控制是在创build内存的程序中,还是由系统pipe理员限制?

了解linuxpipe道ipc通信的生命线

我想了解一个pipe道的生命周期? http://linux.die.net/man/2/pipe 如果发送者或接收者死亡/退出,pipe道中的数据是否保持活动状态? 如果接收器不存在,是否可以创buildpipe道? (即还没有分叉)? 我需要从发件人发送数据到接收者。 但是,接收器可能还没有被分叉,并且可能在发送者之后的1〜2秒内被激活。 他们共享父进程,但接收者可能会在发送者之后的某个时刻被分叉,反之亦然。 发件人也可以随时完成处理并退出。 我试图看看是否使用pipe道而不是共享内存队列将为我工作。

在Perl中修改一个subprocess的环境

我不知道为什么这不起作用,但也许我已经过于简单/过于复杂的事情 我正在编写一个Perl脚本,最终需要调用一个外部程序。 值得一提的是,这个程序需要LD_LIBRARY_PATH环境variables的修改版本,以便find供应商不在标准位置安装的一对库。 好的,环境是%ENV ,可以重写,是吗? 我想如果我改变父母的LD_LIBRARY_PATH ,它会影响孩子的dynamic链接。 所以我有: use Env qw(@LD_LIBRARY_PATH); use IPC::System::Simple qw(capturex $EXITVAL); # We need these to establish the call to rsq later my ($rsqexe, $rsqhome, $suffix) = fileparse($config->rsq()); push @LD_LIBRARY_PATH, $rsqhome; eval { $output = capturex( $config->rsq(), qq/"$source"/ ); }; 但是subprocess死了,显示共享库无法find。 我怎样才能改善这个? 我需要在成功执行后检查$output的内容。

用fprintf发送一个箭头键

我正在testingpipe道,并打了一个小路障。 我想能够模拟通过由popen打开的文件指针按右箭头键。 文件指针在不同的terminal上打开一个显示程序,就像投影仪一样。 我想发送一个信号来推进下一个图像(右箭头键)。 我怎么去发送这个信号? 我意识到这将是特定于我的电脑(BOIS /键盘设置),但我不希望这是便携式无论如何。 从我的试验看来,通过fprintf发送的所有内容都被解释为可读的字符,而不是特殊的编码。 幻灯片程序不能更改,所以这不是一个选项。 任何方向将不胜感激。