How can I capture the stdout from a process that is ALREADY running

后端 未结 5 957
深忆病人
深忆病人 2021-01-30 22:21

I have a running cron job that will be going for a while and I\'d like to view its stdout. I don\'t know how important the fact that the process was started by cron is, but I f

5条回答
  •  不要未来只要你来
    2021-01-30 22:31

    True solution for OSX

    Write the following function to your ~/.bashrc or ~/.zshrc.

    capture() {
        sudo dtrace -p "$1" -qn '
            syscall::write*:entry
            /pid == $target && arg0 == 1/ {
                printf("%s", copyinstr(arg1, arg2));
            }
        '
    }
    

    Usage:

    example@localhost:~$ perl -e 'STDOUT->autoflush; while (1) { print "Hello\n"; sleep 1; }' >/dev/null &
    [1] 97755
    example@localhost:~$ capture 97755
    Hello
    Hello
    Hello
    Hello
    ...
    

    https://github.com/mivok/squirrelpouch/wiki/dtrace

    NOTE:

    You must disable dtrace restriction on El Capitan or later.

    csrutil enable --without dtrace
    

提交回复
热议问题