Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何捕获后台进程的输出_Bash_Shell_Ipc_Zsh - Fatal编程技术网

Bash 如何捕获后台进程的输出

Bash 如何捕获后台进程的输出,bash,shell,ipc,zsh,Bash,Shell,Ipc,Zsh,在后台运行进程并仅在需要时接收其输出的最佳方式是什么 预期用途:使具有大量初始化的提示输出脚本在每个会话中初始化一次,而不是在每次提示运行时初始化一次。注意:需要双向通信:shell需要告知何时需要新的提示符,最后一个命令的状态是什么 已知解决方案: 一些在文件系统上显式创建的文件(FIFO文件、UNIX套接字):最好避免这种情况,因为这意味着我需要选择文件名,确保它在退出时被垃圾收集,并添加一些东西来清除不再使用的文件,以防崩溃 zsh/zpty模块:对于这项工作来说,它有点像杀伤力过大,在

在后台运行进程并仅在需要时接收其输出的最佳方式是什么

预期用途:使具有大量初始化的提示输出脚本在每个会话中初始化一次,而不是在每次提示运行时初始化一次。注意:需要双向通信:shell需要告知何时需要新的提示符,最后一个命令的状态是什么

已知解决方案:

  • 一些在文件系统上显式创建的文件(FIFO文件、UNIX套接字):最好避免这种情况,因为这意味着我需要选择文件名,确保它在退出时被垃圾收集,并添加一些东西来清除不再使用的文件,以防崩溃
  • zsh/zpty模块:对于这项工作来说,它有点像杀伤力过大,在bash中不起作用
  • 协进程:在bash和AFAIK中不工作每个会话只允许一个协进程

  • 自CES 4.0以来,Bash支持协进程,但多个协进程仍处于试验阶段

    我会使用一些显式创建的文件,将它们命名为
    ~/.myThing-$HOSTNAME/fifo
    ,如果它们是按用户和主机命名的。您可以使用
    flock
    相对轻松地确定命令是否仍在运行,并可以选择启动它:

    (
      flock -n 123 || exit 1
      rm/mkfifo ..
      exec yourServer < .. > ..
    ) 123> ~/".myThing-$HOSTNAME/lockfile"
    
    (
    羊群-n 123 | |出口1
    rm/mkfifo。。
    执行您的服务器<..>。。
    )123>~/“.myThing-$HOSTNAME/lockfile”
    
    如果命令或服务器死亡,锁将自动释放,并且您只有少量零长度文件。下一次服务器启动时,它会删除并再次设置它们

    查询服务器类似,但如果锁未被使用,则会退出(并且可以选择使用等待锁以避免争用)