Поскольку команде open не удалось открыть файл, она возвратила значение -1, чтобы сообщить об ошибке. Видно, что команда strace выводит название ошибки и дает ее краткое описание.
Отсутствующие файлы являются наиболее частым источником ошибок в командах Unix, поэтому если системный журнал и другая информация оказываются не слишком полезными, а обратиться больше не к чему, то команда strace может оказать существенную помощь. Ее можно применить даже для демонов, которые откреплены. Например, так:
$ strace -o crummyd_strace -ff crummyd
В данном примере параметр -o команды strace заносит в журнал действия любого дочернего процесса, который демон crummy породил в crummyd_strace.
8.3.2. Команда ltrace
Команда ltrace отслеживает вызовы совместно используемых библиотек. Результаты ее работы напоминают вывод команды strace, и именно поэтому я упоминаю о ней здесь, но она не отслеживает ничего на уровне ядра. Имейте в виду: вызовов совместно используемых библиотек
примечание
См. подраздел 15.1.4, содержащий дополнительную информацию. Команда ltrace не работает для статически связанных двоичных файлов.
8.4. Потоки
В Linux некоторые процессы разделены на части, называемые
8.4.1. Однопоточные и многопоточные процессы
Многие процессы обладают только одним потоком. Процесс с одним потоком является
примечание
Если процесс является однопоточным, то о потоках вообще довольно редко упоминают. В этой книге на потоки не обращается внимание, если многопоточные процессы не отражаются на том, что вы видите или осуществляете.
Основное преимущество многопоточных процессов таково: когда процесс должен выполнить много работы, потоки могут быть запущены одновременно на нескольких процессорах, что потенциально ускоряет вычисления. Хотя одновременные вычисления можно организовать и с помощью нескольких процессов, потоки запускаются быстрее процессов и потокам часто бывает проще и/или эффективнее взаимодействовать между собой при совместном использовании памяти по сравнению с процессами, которые взаимодействуют через сетевое соединение или канал.
Некоторые команды применяют потоки, чтобы обойти проблемы при управлении несколькими ресурсами ввода/вывода. Традиционно процесс использовал бы что-либо вроде команды fork, чтобы запустить новый подпроцесс для работы с новым потоком ввода или вывода. Потоки предлагают похожий механизм без излишнего запуска нового процесса.
8.4.2. Просмотр потоков
По умолчанию в выводе команд ps и top отображаются только процессы. Чтобы показать информацию о потоке в команде ps, добавьте параметр m (пример 8.1).
Пример 8.1. Просмотр потоков с помощью команды ps m
$ ps m
PID TTY STAT TIME COMMAND
3587 pts/3 – 0:00 bash
–- Ss 0:00 -
3592 pts/4 – 0:00 bash
–- Ss 0:00 -
12287 pts/8 – 0:54 /usr/bin/python /usr/bin/gm-notify
–- SL1 0:48 -
–- SL1 0:00 -
–- SL1 0:06 -
–- SL1 0:00 -
В примере 8.1 процессы показаны вместе с потоками. Каждая строка с номером в столбце PID (эти строки отмечены символами
Если вы желаете просмотреть идентификаторы потоков с помощью команды ps, можно использовать специальный формат вывода. В примере 8.2 показаны только идентификаторы процессов и потоков, а также сама команда.
Пример 8.2. Отображение идентификаторов процессов и потоков с помощью команды ps m
$ ps m -o pid,tid,command
PID TID COMMAND
3587 – bash
– 3587 -
3592 – bash
– 3592 -
12287 – /usr/bin/python /usr/bin/gm-notify
–12287 -
–12288 -
–12289 -
–12295 -