Я нашел этот поток на 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 в списке процессов.
В 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'
[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