Требования к утилите

Требования к утилите, которые стали понятны из телефонного разговора, были довольно нехитры: заказчики хотели простой иметь простой, минимально затрагивающий поведение программы, способ ассоциировать некую маркировку с каждым потоком, который они могли контролировать в их системе. Этот маркер должен был отображаться вместе с другой информацией выводимой pidin . Мы договорились, что для «маркировки потока» будет достаточно небольшого массива данных, который должен содержать по крайней мере ASCII строку. Позже я добавил еще и 64 байтный массив двоичных данных — я не знаю, использовали ли они его или нет, он был добавлен в качестве резерва для «будущего применения».

Конечно, возможность интегрировать отображение такой информации в pidin было бы очень изящным решением, но это было невозможно, так как у меня в то время не было доступа к исходным кодам pidin (сейчас этот исходный код доступен на CVS сервере QSSL cvs.qnx.com). К тому же, мы решили, что модифицировать pidin не стоит. Так как он принадлежит QSSL, любые последующие изменения в его исходных кодах, внесенные QSSL, могли бы сделать наш код неработоспособным. Конечно, имея разрешение QSSL, это можно было бы решить с помощью patch, но мы не хотели связывать себя поддержкой нашего кода в дальнейшем. Поэтому мы решили что лучшим для нас будет создание отдельной утилиты (tfp), которая будет печатать ID процесса, ID потока и «маркировку потока» для каждого потока в системе. Потоки, у которых маркировка отсутствует, печататься не должны.

Таким образом, требования для решения проблемы идентификации потоков можно было сформулировать следующим образом:

каждый поток должен иметь возможность «идентифицировать» сам себя;
поток должен иметь возможность изменить свое «удостоверение личности» в любое время;
должна быть внешняя утилита командной строки, которая могла бы печатать строку идентификации каждого потока вместе с шестнадцатеричным дампом блока данных.
Так как требования сделать строку идентификации и блок двоичных данных доступными для других утилит не было, мы ограничились одной утилитой командной строки.