bash [email protected]:~/BLP4e/chapter03>Вы видите несколько сеансов терминалов, запустивших командную оболочку bash и сеанс передачи файла, выполняющий программу
ftpftpВ данном случае для ftp задан идентификатор процесса
9118$ <b>ls -l /proc/9118</b>total 00 dr-xr-xr-x 2 neil users 0 2007-05-20 07:43 attr0 -r-------- 1 neil users 0 2007-05-20 07:43 auxv0 -r--r--r-- 1 neil users 0 2007-05-20 07:35 cmdline0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 cpuset0 lrvxrwxrwx 1 neil users 0 2007-05-20 07:43 cwd -> /home/neil/BLP4e/chapter030 -r-------- 1 neil users 0 2007-05-20 07:43 environ0 lrwxrwxrwx 1 neil users 0 2007-05-20 07:43 exe -> /usr/bin/pftp0 dr-x------ 2 neil users 0 2007-05-20 07:19 fd0 -rw-r--r-- 1 neil users 0 2007-05-20 07:43 loginuid0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 maps0 -rw------- 1 neil users 0 2007-05-20 07:43 mem0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 mounts0 -r-------- 1 neil users 0 2007-05-20 07:43 mountstats0 -rw-r--r-- 1 neil users 0 2007-05-20 07:43 oom_adj0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 oom_score0 lrwxrwxrwx 1 neil users 0 2007-05-20 07:43 root -> /0 -rw------- 1 neil users 0 2007-05-20 07:43 seccomp0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 smaps0 -r--r--r-- 1 neil users 0 2007-05-20 07:33 stat0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 statm0 -r--r--r-- 1 neil users 0 2007-05-20 07:33 status0 dr-xr-xr-x 3 neil users 0 2007-05-20 07:43 task0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 wchanВ данном перечне вы видите разные специальные файлы, способные сообщить вам, что происходит с процессом.
Можно сказать, что выполняется программа /usr/bin/pftp, и ее текущий рабочий каталог — home/neil/BLP4e/chapter03. Есть возможность прочитать другие файлы из этого каталога, чтобы увидеть командную строку, применяемую для запуска программы, а также ее окружение. Файлы cmdline и environ предоставляют эту информацию в виде последовательности нуль-терминированных строк, поэтому вам следует соблюдать осторожность при их просмотре. Более подробно окружение ОС Linux мы обсудим в главе 4.
$ <b>od -с /proc/9118/cmdline</b>0000000 f t p \0 1 9 2 . 1 6 8 . 0 . 1 20000020 \00000021Из полученного вывода видно, что
ftpftp 192.163.0.12Подкаталог fd предоставляет информацию об открытых дескрипторах файлов, используемых процессом. Эти данные могут быть полезны при определении количества файлов, одновременно открытых программой. На каждый открытый дескриптор приходится один элемент; имя его соответствует номеру дескриптора. В нашем случае, как мы и ожидали, у программы
ftp$ <b>ls /proc/9118/fd</b>0 1 2 3Более сложные приемы: fcntl и mmap
Теперь мы коснемся приемов, которые вы можете пропустить, поскольку они редко используются. Признавая это, мы помещаем их в книгу просто для вашего сведения, потому что применение описываемых средств может предоставить простые решения для замысловатых проблем.
fcntl
Системный вызов
fcntl<b>#include <fcntl.h></b><b>int fcntl(int fildes, int cmd);</b><b>int fcntl(int fildes, int cmd, long arg);</b>С помощью системного вызова
fcntlРазличные операции выбираются разными значениями параметра команды
cmdarg□
fcntl(fildes, F_DUPFD, newfd)newfdfildesnewfddup(fildes)□
fcntl(fildes, F_GETFD)FD_CLOEXEC□
fcntl(fildes, F_SETFD, flags)FD_CLOEXEC□
fcntl(fildes, F_GETFL)fcntl(fildes, F_SETFL, flags)O_ACCMODEO_CREAT