据我了解,管道的一端既可以读写 fd,另一端也可以读写 fd。这就是为什么当我们使用 using 写入时fd[1],我们关闭了读取端,例如fd[0]管道同一侧的读取端,而当我们从第二端读取 using 时,fd[0]我们关闭了fd[1]该端的读取端。我对么?
在运行 postgresql 的 Debian lenny 服务器中,我注意到缺少信号量数组会阻止 Apache 启动。
查看限制,我看到最多 128 个数组中使用了 128 个数组,用于信号量。我知道这是问题所在,因为它发生在semget通话中。
如何增加数组的数量?
PS:我需要运行 Apache 才能使用 phppgadmin。
我想知道如何创建一个终端设备来模拟通过串口连接的一块硬件。基本上,具有特定波特率的 tty 设备可以在两个进程之间读取和写入。据我所知,我正在寻找一个伪终端,并且makedev显然可以制造一个。
我还发现了以下一组说明:
su to root
cd /dev
mkdir pty
mknod pty/m0 c 2 0
mknod pty/s0 c 3 0
ln -s pty/m0 ttyp0
ln -s pty/s0 ptyp0
chmod a+w pty/m0 pty/s0
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来制作伪终端,或者这几乎是在 shell 中制作一个的标准方法?
我知道使用 ipcs(1) 命令可以监视 System V 消息队列、共享内存和信号量,但是如何监视 POSIX 消息队列、共享内存和信号量。对于 POSIX 消息队列,我可以安装伪文件系统,如 mq_overview(7) 中所述。预先感谢您的任何帮助。
有没有办法在不使用服务器进程的情况下从命令行实现发布/订阅模式?这只需要在一台机器上工作。
我想通过没有服务器进程来避免的主要事情是配置一台机器来使用这些工具。我也非常希望不必处理我的服务器进程死亡的可能性。|
这可能类似于:
# client 1
subscribe name | while read line; do echo $line; done
# client 2
subscribe name | while read line; do echo $line; done
# server
echo message | publish name
Run Code Online (Sandbox Code Playgroud)
stdio我正在尝试从其父进程外部访问进程的流。我已经找到了该/proc/[pid]/fd目录,但是当我尝试时
$ cat /proc/[pid]/fd/1
Run Code Online (Sandbox Code Playgroud)
我收到一个No such file or device错误。我确信它存在,正如 Dolphin(文件浏览器)所显示的那样。
我还碰巧注意到文件资源管理器将其列为套接字,并尝试按照此处的建议从中读取内容会产生类似的错误。这对我来说很奇怪,因为stdio流通常是管道,而不是套接字,所以我不确定这里发生了什么。
我还想指出,这些进程是由同一用户启动的,并且尝试访问它也sudo不起作用。如果这个问题看起来很幼稚,我深表歉意,但我真诚地感谢一些指导 - 也许有更好的方法来访问 stdio 管道?
我说得对吗
当两个进程通过网络套接字通信时,每个进程创建一个套接字(每个套接字属于一个进程),进程通过它们的套接字进行通信。
当两个进程通过Unix域套接字通信时,只创建一个套接字(不属于任何进程),并且两个进程都连接到同一个套接字?
当我们使用 POSIX shell 运行它时,
$ cmd0 | cmd1
Run Code Online (Sandbox Code Playgroud)
cmd0 的 STDOUT 通过管道传输到 cmd1 的 STDIN。
问:除此之外,我还如何将 cmd1 的 STDOUT 通过管道传输到 cmd0 的 STDIN?
必须使用重定向自/进入命名管道 (FIFO) 吗?我不太喜欢命名管道,因为它们占用了一些文件系统路径,我需要担心名称冲突。或者我必须通过 C、Python 或一些通用编程语言调用 pipe(2) 吗?
(cmd0 和 cmd1 都执行一些网络 I/O,因此它们不会永远相互阻塞。)
如果文件描述符特定于每个进程(即两个进程可能使用相同的文件描述符 id 来引用不同的打开文件),那么如何通过套接字等共享传输文件描述符(例如共享 mmap)?
它是否依赖于内核被映射到每个进程下的相同数字地址范围?
当我查看 时journalctl,它会告诉我日志条目的 PID 和程序名称(或服务名称?)。
然后我想知道,日志是由其他进程创建的,systemd-journald当进程可能只将原始字符串写入systemd-journald正在侦听的unix域套接字时,如何知道这些进程的PID 。此外,sytemd-journald即使进程使用诸如sd_journal_sendv()?
有没有我应该阅读的文档?
我阅读了JdeBP 的回答并且知道systemd-journald在 Unix Domian Socket 上监听,但是即使可以知道发送日志消息的对等套接字地址,它如何知道 PID?如果发送套接字被许多非父子进程打开怎么办?
RabbitMQ 是否用于进程间通信,如管道和命名管道?RabbitMQ 与命名管道相比如何?除了分布式系统。
(RabbitMQ,对于那些还没有遇到过的人来说,它是一个开源的、中间件、使用 AMQP 的企业消息代理。)
来自 APUE
FIFO 可用于在一系列 shell 命令中复制输出流。这可以防止将数据写入中间磁盘文件(类似于使用管道避免中间磁盘文件)。
但是管道只能用于进程之间的线性连接,而 FIFO 有一个名称,因此它可以用于 非线性连接。
考虑一个需要处理过滤输入流两次的过程。
Run Code Online (Sandbox Code Playgroud)mkfifo fifo1 prog3 < fifo1 & prog1 < infile | tee fifo1 | prog2我们创建 FIFO,然后在后台启动 prog3,从 FIFO 中读取。然后我们启动 prog1 并使用 tee 将其输入发送到 FIFO 和 prog2。
FIFO 如何“在一系列 shell 命令中复制输出流”?这不是由teeFIFO 来完成的吗?
在示例中,mkfifo fifo1在当前目录中创建一个文件,并且fifo1似乎可以用常规文件替换。那么FIFO“防止将数据写入中间磁盘文件”的意义何在?
进程之间的“线性连接”和“非线性连接”是什么意思?FIFO可以用于非线性连接,而管道只能用于进程之间的线性连接是什么意思?
谢谢。
FIFO 在使用中存在问题,因为读取器和写入器都必须打开它\xe2\x80\x93,如果其中一个迟到,而另一个被阻塞在操作系统内。
\n\n我必须实现一个发布机制 \xe2\x80\x93 一个程序发布其日志,如果有人“关心”监听,即打开发布通道,他就会收到消息。如果没有人“关心”,消息就会消失,没问题。支持不超过单个侦听器 \xe2\x80\x93 也没有问题。我可以用什么?
\n