在Linux中,I';我在寻找一种方法,让一个进程通过阻塞向另一个进程发出信号

在Linux中,I';我在寻找一种方法,让一个进程通过阻塞向另一个进程发出信号,linux,events,ipc,blocking,Linux,Events,Ipc,Blocking,我正在寻找一个简单的事件通知系统: 处理一个块,直到收到 进程B触发进程A 如果我在Win32中执行此操作,我可能会使用事件对象(“A”块,当“B”执行SetEvent时)。 我需要一些非常快速和肮脏的东西(更喜欢脚本而不是C代码)。 你有什么建议?我想知道文件顾问锁,但它看起来很混乱。其中一个进程必须主动打开文件才能保持锁定。快而脏 然后使用。它是一个命名管道。该进程以阻塞模式从fifo的FD中读取数据。进程B在需要时写入它 确实很简单 下面是bash脚本实现: 方案A: #!/bin/bas

我正在寻找一个简单的事件通知系统:

  • 处理一个块,直到收到

  • 进程B触发进程A

  • 如果我在Win32中执行此操作,我可能会使用事件对象(“A”块,当“B”执行SetEvent时)。 我需要一些非常快速和肮脏的东西(更喜欢脚本而不是C代码)。 你有什么建议?我想知道文件顾问锁,但它看起来很混乱。其中一个进程必须主动打开文件才能保持锁定。

    快而脏

    然后使用。它是一个命名管道。该进程以阻塞模式从fifo的FD中读取数据。进程B在需要时写入它

    确实很简单

    下面是bash脚本实现:

    方案A:

    #!/bin/bash
    
    mkfifo /tmp/event
    while read -n 1 </tmp/event; do 
        echo "got message";
    done
    
    首先启动脚本A,然后在另一个shell窗口中重复启动脚本B。

    快且脏吗

    然后使用。它是一个命名管道。该进程以阻塞模式从fifo的FD中读取数据。进程B在需要时写入它

    确实很简单

    下面是bash脚本实现:

    方案A:

    #!/bin/bash
    
    mkfifo /tmp/event
    while read -n 1 </tmp/event; do 
        echo "got message";
    done
    

    首先启动脚本A,然后在另一个shell窗口中重复启动脚本B。

    除fifo外,您可以使用signal和kill进行中断,并让一个进程休眠,直到它接收到类似SIGUSR1的信号,然后解锁它(您可以使用条件变量轻松实现这一点,无需轮询).

    除了fifo,您可以使用signal和kill基本上执行中断,并有一个进程睡眠,直到它接收到像SIGUSR1这样的信号,然后解锁它(您可以使用条件变量轻松实现这一点,而无需轮询)。

    缓慢而干净

    然后使用(命名的)信号量:POSIX或SysV(不推荐使用,但可能更便于携带)。进程A是否执行A
    sem\u wait
    (或
    sem\u timedwait
    )和进程B调用
    sem\u post

    缓慢且干净


    然后使用(命名的)信号量:POSIX或SysV(不推荐使用,但可能更便于携带)。进程A执行一个
    sem\u wait
    (或
    sem\u timedwait
    )和进程B调用
    sem\u post

    好吧,进程A的最佳方式(因为它没有其他事情可做)就是坐在块读取中。可以位于套接字、套接字对、管道或命名管道上。只需坐在文件描述符上,直到果汁进入…好吧,进程A的最佳方式(因为它没有其他事情要做)就是坐在阻塞读取中。可以位于套接字、套接字对、管道或命名管道上。坐在那个文件描述符上,直到果汁进来……哈;我完全忘记了命名管道。后来我意识到我需要想出一种方法来支持读取超时。我希望我仍然可以使用FIFO,因为它优雅而简单;我完全忘记了命名管道。后来我意识到我需要想出一种方法来支持读取超时。我希望我仍然可以使用FIFO,因为它优雅而简单。