LINUX.ORG.RU

2nobody: как ПРОГРАММНО ?!

anonymous
()

Если речь идет о поиске произвольного процесса -- то cм. /proc. Если нужно проверить, что данное приложение уже работает -- использовать .pid файлы.

aa5779
()

.pid файлы ?!

anonymous
()

> 2nobody: как ПРОГРАММНО ?!

а по твоему ps и grep это не программы?

lg ★★
()

2lg: да ладно хватит прикалываться :) как сделать это функциями C ? запускать шеллом ps | grep желания нет :)

anonymous
()

пройдись по списку процессов проверяя pid с тем что ты ищешь - список процессов берешь так как это делает ps(везде по разному я чувсвую, где через kvm, где через procfs) - ну чем не ps | grep ? :)

кстати еще есть QueryTree() если надо дерево X окон :)

lg ★★
()

> запускать шеллом ps | grep желания нет

А что так? Религия не позволяет? Положим, ты вручную можешь написать парсер /proc. Но ответь сам себе на вопрос: зачем делать одну и ту же работу дважды? Есть ps. Программа сделана и вылизана, она работает. У тебя есть system(3). Делаешь в своей проге `system("ps");' и получаешь готовый парсер /proc. Если тебе нужно просто проверить, выполняется ли в системе некая программа, то сделать можно например так:

system("ps -ax | grep имя_программы | grep -v grep &>/dev/null");

Если нужно получить инфу по процессу, то вместо system можно использовать popen(3). (Ну и подобрать опции ps по вкусу и не перенаправлять вывод на /dev/null).

Если имя программы заранее не известно (а запрашивается например у юзера), то строку для popen можно сформировать во время выполнения с помощью sprintf(3).

Если ты будешь юзать шелл и готовые утилиты ком.строки, программа у тебя будет меньше и проще, чем если все будешь делать сам. Может быть даже тебе и Си не понадобится (не вообще, а для какой-то конкретной простой задачи -- на шелле ее сделаешь -- проще и быстрее).

nobody ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.