Я не могу получить PID для этого "${@}" 1> >(2log) 2> >(2log2scr | tee >&2)

Попробуйте это:

sed -i '/^$/d' file.txt
0
13.06.2019, 20:37
2 ответа

PID фонового процесса можно получить из $! переменная среды, если она была переведена в фоновый режим (путем добавления & в конец вашей команды ), т.е.

my-cmd &
echo $!

Еще один вариант, который вы можете изучить, — это использование $$ (pid текущей оболочки )в исполняемой оболочке, например.

exec sh -c 'echo $$ > t.pid && sleep 10' &
echo $!  # <-- pid of spawned shell
pid=$(cat t.pid)  # <-- pid of execed process in shell

Что-то вроде этого даст вам pid во временном файле с именем t.pid

1
28.01.2020, 02:40

Единственный способ заставить это работать, не нарушая мой EVAL, это:

runner () {
    echo -e "started running\n"
    "${@}" 1> >(2log) 2> >(2log2scr | tee >&2) 
    while [ -e /proc/$! ]; do sleep 0.1; done
    echo -e "$pid finished running\n"
}

Разница здесь в том, что я просто обращаюсь к $!без каких-либо предварительных требований. Во всех предложениях везде упоминается, что $! доступна, если мы назовем нашу подпрограмму так:

my-cmd &
echo $!

Кажется, что это не является обязательным требованием, и что мы можем просто получить доступ к $!после любой сложной процедуры, такой как "${@}" 1> >(2log) 2> >(2log2scr | tee >&2), без использования '&' где-либо

0
28.01.2020, 02:40

Теги

Похожие вопросы