Сложно: pid - идентификатор процесса; tid - идентификатор потока.
Но, как оказалось, ядро не делает между ними реального различия: потоки похожи на процессы, но они разделяют некоторые вещи (память, fds ...) с другими экземплярами той же группы .
Таким образом, tid фактически является идентификатором планируемого объекта в ядре (потоке), тогда как pid является идентификатором группы планируемых объектов, которые совместно используют память и FDS (процесс).
Но, чтобы сделать вещи более интересными, когда у процесса есть только один поток (исходная ситуация и в старые добрые времена единственный), pid и tid всегда тот же самый. Поэтому любая функция, которая работает с tid , будет автоматически работать с pid .
Стоит отметить, что многие функции / системные вызовы / утилиты командной строки, задокументированные для работы с pid , на самом деле используют tids . Но если эффект распространяется на весь процесс, вы просто не заметите разницу.