Показать весь процесс с помощью функции posix - PullRequest
3 голосов
/ 08 сентября 2010

Я пытаюсь отобразить текущий запущенный процесс в Ubuntu.

Прямо сейчас я использую функцию system () для печати запущенного процесса в терминале. Код:

system("ps -A");

Эта функция отображает весь запущенный процесс в терминале.

Но я хочу использовать эту функцию, используя функцию POSIX. Я не ищу готовый код.

Может ли кто-нибудь указать мне название функции или какое-либо руководство?

Ответы [ 4 ]

5 голосов
/ 08 сентября 2010

ps - это команда POSIX.

popen - это POSIX API для чтения выходных данных из команды.

Если вы хотите использовать чисто POSIX-подход (возможно, вы хотите, чтобы он был переносимым)для некоторых ОС, которые не предоставляют /proc), вы должны запустить ps с параметрами только для POSIX и извлечь вывод из popen.

Так, например, возможно, вы хотите вызвать popen("ps -A -o pid=", "r"); а затем прочитайте список PID.

1 голос
/ 08 сентября 2010

Взгляните на popen

1 голос
/ 08 сентября 2010

Но я хочу использовать эту функцию, используя функцию POSIX. Я не ищу готовый код.

Не существует функции POSIX для отображения запущенных процессов. Это зависит от ОС, а не переносимо, редко требуется приложениям и, следовательно, не является частью POSIX.

Но поскольку вам это нужно в Linux, наиболее подходящим решением POSIXy будет использование функций opendir() / readdir() / closedir() для перебора содержимого специальной файловой системы /proc.

Все числовые записи в каталоге являются PID запущенных процессов. Проверьте содержимое man 5 proc, чтобы узнать, какую информацию о запущенных процессах можно получить оттуда. Затем вы можете использовать вызовы open() / read() / close() или readlink() для получения информации о конкретном процессе из файлов /proc/NNN/*.

В Linux стандартные инструменты, такие как ps и top, используют /proc для сбора информации о процессах. Это официальный интерфейс Linux для информации о запущенных процессах.

1 голос
/ 08 сентября 2010

Насколько я знаю, ps в Linux внутренне зацикливается на каталогах (соответствующих идентификаторам процессов), найденных в /proc. Поэтому я думаю, что нет единой функции, которая бы выполняла это, вам пришлось бы циклически перебирать подкаталоги /proc самостоятельно (используя более общие функции POSIX, такие как readdir и т.

...