Команда, с помощью которой был запущен процесс

Команда, с помощью которой был запущен процесс

Предположим, я запустил процесс с помощью следующей команды:

myapp -e -c -f myapp.config > /var/log/myapp/myapp.log 2>&1

Через некоторое время у меня остается только pidпроцесс myapp, например 1234. Есть ли способ получить команду со всеми флагами и перенаправить вывод myapp.logкаким-то образом, просто pid?

решение1

ps -o args= -p "$pid"

Сообщит вам список аргументов, переданных последней команде, выполненной процессом (или, если он не выполнил ни одной, то той, которую выполнил его родительский процесс...), при условии, что процесс впоследствии не переопределил свой список аргументов.

psпокажет этот список аргументов, объединенный пробелами и до предела, который вы можете увеличить в некоторых psреализациях, добавив несколько -wопций). В Linux вы можете увидеть список аргументов, разделенный байтами NUL в /proc/$pid/cmdline.

lsof +fg -ap "$pid" -d 0-2

Сообщит вам, на что указывают файловые дескрипторы процесса stdin, stdout и stderr, а также режим, в котором они были открыты (например, W,APдля режима «только запись» с добавлением, как если бы >>перенаправление использовалось в оболочке POSIX).

решение2

Вы можете использовать psкоманду и указать pid для проверки с помощью -pпереключателя, используя -fпереключатель для получения полного списка или -lдля более подробного длинного списка.

В качестве примера вывода:

$ sleep 60 &
[1] 31441
$ ps -lp 31441
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S     0 31441 31319  0  80   0 -  1423 hrtime pts/3    00:00:00 sleep
$ ps -fp 31441
UID        PID  PPID  C STIME TTY          TIME CMD
root     31441 31319  0 10:44 pts/3    00:00:00 sleep 60

Однако это выводит строку заголовка, которая вам может не понадобиться в вашем файле журнала. Вы можете обрезать ее с помощью опции -h, если ваш pid был 1234:

ps -lhp 1234 >> /var/log/myapp/myapp.log 2>&1

Обратите внимание, что я перенаправил вывод, используя функцию >>для добавления в ваш файл журнала.

решение3

Используя ps -fвы можете проверить список аргументов, а также перенаправить его в любой файл.

Так что в этом случае просто используйтеps -ef | grep 1234 > myapp.log

Пожалуйста, проверьте этостраница руководства ps.

Связанный контент