Перенаправьте вывод команды в 'команде времени'

Я нашел этот поток на lkml, который отвечает на Ваш вопрос немного. (Кажется, что даже сам Linus был озадачен относительно того, как узнать источник тех потоков.)

В основном существует два способа сделать это:

$ echo workqueue:workqueue_queue_work > /sys/kernel/debug/tracing/set_event
$ cat /sys/kernel/debug/tracing/trace_pipe > out.txt
(wait a few secs)

Для этого Вам будет нужен ftrace, который будет скомпилирован в Вашем ядре и включит его с:

mount -t debugfs nodev /sys/kernel/debug

Больше информации о функциональных средствах трассировщика Linux доступно в документации ftrace.txt.

Это произведет то, что все делают потоки, и полезно для трассировки нескольких небольших заданий.

cat /proc/THE_OFFENDING_KWORKER/stack

Это произведет стопку единственного потока, делающего большую работу. Это может позволить Вам узнавать то, что вызвало этот определенный поток к пожирателю ресурсов ЦП (например). THE_OFFENDING_KWORKER pid kworker в списке процессов.

9
16.03.2016, 00:45
2 ответа

В ksh, bash и zsh, время является ключевым словом, а не сборкой. Переадресации в той же строке применяются только к команде, для которой выполняется тайминг, а не к выходу самого времени .

$ time ls -d / /nofile >/dev/null 2>/dev/null

real    0m0.003s
user    0m0.000s
sys     0m0.000s

Для перенаправления вывода из самого времени в этих оболочках необходимо использовать дополнительный уровень группировки.

{ time mycommand 2>&3; } 3>&2 2>mycommand.time

Если вы используете GNU-версию автономной утилиты time , то она имеет опцию -o для записи вывода time где-либо еще, кроме stderr. Вы можете сделать запись time в терминал:

/usr/bin/time -o /dev/tty mycommand >/dev/null 2>/dev/null

Если вы хотите сохранить вывод из time по его стандартной ошибке, вам нужен дополнительный уровень перетасовки дескрипторов файлов.

/usr/bin/time -o /dev/fd/3 mycommand 3>&2 >/dev/null 2>/dev/null

С помощью любой утилиты time вы можете вызвать промежуточную оболочку для выполнения нужных перенаправлений. Призыв к промежуточной оболочке для выполнения дополнительных действий, таких как cd, перенаправления и т.д., довольно распространен - это такие мелочи, для которых и предназначены оболочки.

/usr/bin/time sh -c 'exec mycommand >/dev/null 2>/dev/null'
17
27.01.2020, 20:05
[artur@asus-ux21e ~]$ find /etc/pki/CA/private/
/etc/pki/CA/private/
find: ‘/etc/pki/CA/private/’: Permission denied
[artur@asus-ux21e ~]$ time (find /etc/pki/CA/private/ &> /dev/null)

real    0m0.006s
user    0m0.001s
sys 0m0.004s
0
27.01.2020, 20:05

Теги

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