【问题标题】:how to pass information to a background process in bash如何在bash中将信息传递给后台进程
【发布时间】:2012-01-12 15:04:21
【问题描述】:

我创建了一个 bash 脚本,它在后台运行。它有一个存储在文件中的 PID,我可以使用 KILL 将预定义的信号传递给进程。

不过,有时我想手动将信息传递给流程。最好我希望能够传递一个字符串或信息数组,这些信息是通过 TRAP 捕获的,然后 bash 文件中的永远循环将处理这些信息。有没有一种简单的方法可以将信息传递到后台进程?

谢谢

【问题讨论】:

    标签: bash process embedded-linux


    【解决方案1】:

    您可以创建一个fifo,让主进程写入它并让子进程从中读取。

    mkfifo link
    run_sub < link &
    generate_output > link
    

    【讨论】:

    • 非常酷的功能。去测试它,看看它是否适合我的程序。我正在考虑在 bash 中创建一个类似数据结构的队列,但似乎有人已经打败了我。
    • 这个我没试过,但我会记住的。真是太棒了。
    • @jliu83 不,这就是为什么一端(或两端)必须背景。如果我正确地阅读了您的帖子,您从中读取的程序只会循环所有输入,在等待时您需要它做些什么吗?
    • 好的,问题解决了。 Parent 发送一个 Kill -HUP 信号,然后将 pipe 发送给 child,child 捕获 HUP 并从 pipe 读取。这样程序就不会阻塞,并且在不从管道读取时保留功能。还有其他方法吗?这让人感觉很老套,而且是对 bashism 的不好使用。
    【解决方案2】:

    让它监听一个套接字并实现一个协议来实现你的通信目标,对于 bash 来说可能有点多。

    或者,让它在收到特定信号时尝试读取特定文件。例如,程序通常会在收到 HUP 后重新读取其配置文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-16
      • 2012-09-09
      • 2021-11-16
      • 1970-01-01
      • 2016-12-23
      • 2018-06-15
      • 2021-09-04
      • 1970-01-01
      相关资源
      最近更新 更多