【问题标题】:Redirecting standard output to a file containing the pid of the logging process [duplicate]将标准输出重定向到包含日志记录进程的 pid 的文件 [重复]
【发布时间】:2010-10-04 20:56:55
【问题描述】:

我已经搜索了一段时间,但我找不到答案或想出我自己的解决方案,所以我求助于你们。我实际上在这里问的第一个问题:)

我想运行同一个程序的多个实例,并将每个程序的标准输出重定向到一个包含相同进程 pid 的文件,例如:

my_program > <pid of the instance of my_program that is called in this command>.log

我知道这甚至还没有接近:P 我已经修改了 exec 和 $PPID 但无济于事。我的 bash-fu 很弱 :|请帮助我,指出我的地方!谢谢!

【问题讨论】:

    标签: bash scripting


    【解决方案1】:

    您可以将程序执行包装到 bash 脚本中。在exec 调用时,bash 进程将被您的程序替换。所以:

    #!/bin/bash
    exec my_program > $$.log
    

    【讨论】:

    • 这解决了我的问题!谢谢!实际上,我尝试了类似的方法,只是没有将脚本作为单独的 bash 作业运行,以便 exec 可以用 my_program 替换该 bash 实例,我尝试了相同的概念,但使用 bash 的 -c 命令行选项,但它没有不行。
    • bash -c "exec echo $$" 输出 3357. // 在同一个 shell 上,echo $$ 输出 3357
    • @ticklemynausea:你需要考虑一下$$ 何时被 bash 实际替换为值。如果您编写(我们大多数人都这样做)bash -c "exec sleep 300 &gt; $$.log"$$ 不会被我们即将运行的 bash 取代,而是被父(例如当前)bash 取代!现在感受一下不同之处:bash -c 'exec sleep 300 &gt; $$.log'
    【解决方案2】:

    在创建进程之前,您无法知道进程的 PID。

    因此这是不可能的,你应该重写被调用的程序,使用getpid()从它自己的PID伪造一个日志名称。

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 2011-05-19
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多