пройдись по списку процессов проверяя pid с тем что ты ищешь - список процессов берешь так как это делает ps(везде по разному я чувсвую, где через kvm, где через procfs) - ну чем не ps | grep ? :)
кстати еще есть QueryTree() если надо дерево X окон :)
А что так? Религия не позволяет? Положим, ты вручную можешь написать парсер /proc. Но ответь сам себе на вопрос: зачем делать одну и ту же работу дважды? Есть ps. Программа сделана и вылизана, она работает. У тебя есть system(3). Делаешь в своей проге `system("ps");' и получаешь готовый парсер /proc. Если тебе нужно просто проверить, выполняется ли в системе некая программа, то сделать можно например так:
Если нужно получить инфу по процессу, то вместо system можно использовать popen(3). (Ну и подобрать опции ps по вкусу и не перенаправлять вывод на /dev/null).
Если имя программы заранее не известно (а запрашивается например у юзера), то строку для popen можно сформировать во время выполнения с помощью sprintf(3).
Если ты будешь юзать шелл и готовые утилиты ком.строки, программа у тебя будет меньше и проще, чем если все будешь делать сам. Может быть даже тебе и Си не понадобится (не вообще, а для какой-то конкретной простой задачи -- на шелле ее сделаешь -- проще и быстрее).