Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Для обработки кода статуса завершения процесса используются два макроса – WIFEXITED и WEXITSTATUS, которые определены в файле <sys/wait.h>.
Макрос WIFEXITED возвращает ненулевое значение, если порожденный процесс был завершен посредством вызова exit. Макрос WEXITSTATUS возвращает код завершения порожденного процесса, присвоенного вызовом exit. Оба этих макроса обрабатывают значение второго аргумента функции waitpid – переменной status. Эта переменная имеет следующий формат:
n биты 0 – 6 – содержат нуль, если порожденный процесс был завершен с помощью функции exit, или номер сигнала, завершившего процесс.
n бит 7 – равен 1, если из-за прерывания порожденного процесса сигналом был создан дамп образа процесса (файл core). В противном случае равен 0.
n биты 8 – 15 – содержат код завершения порожденного процесса, переданный посредством exit.
А теперь немного изменим приведенный выше пример для демонстрации возможности запуска в дочернем процессе новой программы:
....
switch(pid = fork()) {
case -1:
perror("fork");
return -1;
case 0:
printf("Выполняется дочерний процесс ");
execl("/bin/gzip", "gzip", "test.txt", 0);
perror("gzip");
exit(errno);
}
....
Как видно из приведенного примера, в дочернем процессе при помощи системного вызова exec запускается на выполнение программа gzip, при помощи которой архивируется файл test.txt.
Получение информации о процессе при помощи proc
Главным источником информации о процессах на пользовательском уровне является файловая система proc. Для доступа к этой информации достаточно перейти в каталог /proc. Информация о каждом процессе собрана в отдельном подкаталоге, имя которого совпадает с идентификационным номером процесса. Так, например, информация о процессе init находится в подкаталоге 1, т.к. идентификационный номер этого процесса зарезервирован и равен 1.
На примере процесса init рассмотрим, какие файлы присутствуют в каталоге процесса и какую информацию о процессе они содержат (какая информация в них содержится):
root@darkstar:/proc/1# ls -l
total 0
-r--r--r-- 1 root root 0 Apr 13 21:59 cmdline
lrwxrwxrwx 1 root root 0 Apr 13 21:59 cwd -> //
-r-------- 1 root root 0 Apr 13 21:59 environ
lrwxrwxrwx 1 root root 0 Apr 13 21:59 exe -> /sbin/init*
dr-x------ 2 root root 0 Apr 13 21:59 fd/
-r--r--r-- 1 root root 0 Apr 13 21:59 maps
-rw------- 1 root root 0 Apr 13 21:59 mem