В оболочке, когда я запускаю процесс в фоновом режиме, как я могу получить «[номер задания] [PID]», перенаправленный в файл?

find подход:

find. -maxdepth 1 -type f -regextype posix-egrep \
-regex ".*/201703(0[7-9]|1[0-4]):[0-5][0-9]\.out\.gz$" -exec gunzip {} \;
1
29.02.2020, 22:28
3 ответа

Если у вас оболочка bash[1], вы можете попробовать:

exec 3>&2 2>firefoxFile; firefox & exec 2>&3-

Это ваша оболочка (например. bash ), который печатает уведомление о фоновом задании [jobnum] pidв stderr , а не в firefox. Этот кладж временно перенаправляет stderr в файл firefoxFile, записывая в него это уведомление и все, что Firefox запишет в stderr за время своего существования.

Он НЕ будет захватывать [jobnum] Done firefoxbash, который будет печатать после завершения фонового задания.


Ваш firefox & > fileбудет проанализирован как две команды 1. firefox &(, которая будет запускать firefoxв фоновом режиме )и 2. > file(, которая будет усекать fileбез записи что-нибудь к этому ). Это, безусловно, не то, что вы имели в виду.

[1] вы можете прочитать здесь почему этот трюк не работает в других оболочках; в то время как можно перенаправить stderr в zsh, zshне записывает свои подсказки и уведомления о заданиях в stderr, а в другой fd, указывающий на текущий терминал, открытый специально для этой цели.

2
28.04.2021, 23:21

Это не точно, но близко. Вам просто нужно добавить немного sed.

firefox &
jobs -l | grep -E "\[[0-9]+\]\+" > firefoxFile
0
28.04.2021, 23:21

В своих комментариях вы пишете, что

I want to find the pid and the number of process in background

Как насчет этого

firefox &
pid=$!

echo "The PID for the background process is $pid" >&2

Получив PID, вы, конечно же, можете записать его значение в любой файл по вашему выбору.

2
28.04.2021, 23:21

Теги

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