ps -o args= -p "$pid"
Скажет вам список аргументов, предоставленный последней команде, выполненной процессом (или, если он не выполнил ни одной, той, которую выполнил родительский процесс ...), при условии, что процесс впоследствии не переопределит свой список аргументов.
ps
покажет, что список аргументов объединен с пробелами и до предела, который вы можете увеличить в некоторых ps
реализациях, добавив пару -w
опций). В Linux вы можете увидеть arglist, разделенный байтами NUL /proc/$pid/cmdline
.
lsof +fg -ap "$pid" -d 0-2
Расскажет, на что указывают файловые дескрипторы процесса stdin, stdout и stderr и каков режим, в котором они были открыты (например, только W,AP
для записи с добавлением, как если бы >>
перенаправление использовалось в оболочке POSIX).
lsof
для определения того, что процесс перенаправляется вmyapp.log
readlink /proc/$pid/fd/1
Вы можете использовать
ps
команду и указать pid для проверки с помощью-p
переключателя, используя-f
переключатель для получения полного списка или-l
для более подробного длинного списка.В качестве примера для вывода:
Это, однако, выводит строку заголовка, которая может вам не понадобиться в вашем файле журнала. Вы можете обрезать это, используя
-h
опцию, если ваш pid был 1234:Обратите внимание, что я перенаправил вывод, используя
>>
для добавления в ваш файл журнала.источник
tail -n+1
(требуется GNU, но Q был Linux / Ubuntu). Или избежать проблемы сps -h{f,l}p 1234
(также GNU).tail -n1
безусловно работает на Ubuntu, зачем это+
нужно?tail -n+2
который показывает все строки, кроме первой.tail -n1
показывает только последнюю строку. Сравните:seq 1 10 | tail -n+2
и так далее.-h
поскольку это позволяет избежать ненужной трубы и лишнего процесса.Используя
ps -f
вы можете проверить список аргументов, а также можете перенаправить его в любой файл.Итак, в этом случае просто используйте
ps -ef | grep 1234 > myapp.log
Пожалуйста, проверьте эту страницу руководства PS .
источник
ps -ef | grep 'foo' | grep -v grep
grep -v
я использую этот трюк:grep '123[4]'