Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Отображение в top и ps


Автор: Basteon 12.7.2006, 14:52
Где почитать о том как выводятся имена процессов при запросе "top".
Может кто-нибуть писал что-то подобное?
 

Автор: Orthenner 12.7.2006, 16:46
Вообще, в файловой системе proc можно найти всю информацию о процессах.
Каждый каталог, начинающийся с номера, соответствующего pid процесса, содержит всю информацию о пакете. Файлик cmdline, например, содержит команду, запустившую процесс с аргументами командной строки... 

Автор: Basteon 16.7.2006, 16:27
Цитата

Вообще, в файловой системе proc можно найти всю информацию о процессах.
Каждый каталог, начинающийся с номера, соответствующего pid процесса, содержит всю информацию о пакете. Файлик cmdline, например, содержит команду, запустившую процесс с аргументами командной строки... 

Пожалуйста подробнее...

И ещё, где взять сам исходник top-а? 

Автор: Orthenner 17.7.2006, 11:32
Вот пример по отображению запущенных процессов с аргументами...

Код

#include "stdio.h"
#include "dirent.h"
#include "string.h"
#include "sys/stat.h"
#include "sys/types.h"
#include "fcntl.h"
#include "unistd.h"
#include "stdlib.h"

int main(int argc, char** argv)
{
    DIR* dir;
    struct dirent* entry;
    struct stat st;
    char entry_path[PATH_MAX+1];
    char filename[PATH_MAX+1];
    int fd;
    size_t path_len;

    strncpy(entry_path,"/proc/",sizeof("/proc/"));
    path_len=strlen("/proc/");
    dir=opendir("/proc");
    while((entry=readdir(dir))!=NULL)
    {
        strncpy(entry_path+path_len, entry->d_name, sizeof(entry_path)-path_len);
        lstat(entry_path,&st);
        if(S_ISDIR(st.st_mode)&&atoi(entry->d_name)>0)
        {
            snprintf(filename,sizeof(filename),"/proc/%s/cmdline",entry->d_name);
            fd=open(filename,O_RDONLY);
            int num_read;
            char buf[1024];
            do
            {
                memset(buf, 0, 1024);
                num_read=read(fd,buf,1024);
                if(num_read>0) printf("%s",buf);
            }while(num_read>0);
            printf("\n");
        }
    }
    return 0;
}


По поводу исходника top... Поковыряй в инете исходнички atop, htop, mtop... на gentoo-portage.com должны быть  

Автор: GrayCardinal 17.7.2006, 16:43
Orthenner, 
ftp://distfiles.gentoo.org/pub/gentoo/distfiles
Называется пакет procps
  

Автор: Orthenner 17.7.2006, 16:58
Угу... спасибо, теперь буду знать smile 

Автор: Basteon 18.7.2006, 04:34
Скачал procps-3.2.7.tar.gz
Там нашёл в procps-3.2.7/pc/HACKING
Такое:
global.c      Data + code to init it.

Но это судя по всему по pc, а вот по топ ничего что-то не нашёл.
Чего там можно поменять чтобы при ps ax|grep sh было не


Код

    5 ?        SW     0:00 [bdflush]
 1333 ?        S      0:00 /usr/sbin/sshd
 3033 ?        S      0:00 -bash
 3035 ?        S      0:00 -bash
 3234 ?        S      0:00 /bin/sh /usr/bin/startkde
 3706 ?        S      0:00 sshd: test [priv]
 3713 ?        S      0:00 sshd: test@notty
 3714 ?        S      0:00 -bash
 3736 ?        S      0:00 sshd: test [priv]
 3756 ?        S      0:00 sshd: test@pts/2
 3757 pts/2    S      0:00 -bash
 3786 pts/2    S      0:00 -bash

а

Код

    5 ?        SW     0:00 [bdflush]
 1333 ?        S      0:00 /usr/sbin/sshd
 3033 ?        S      0:00 -bash
 3035 ?        S      0:00 -bash
 3706 ?        S      0:00 sshd: test [priv]
 3713 ?        S      0:00 sshd: test@notty
 3714 ?        S      0:00 -bash
 3736 ?        S      0:00 sshd: test [priv]
 3756 ?        S      0:00 sshd: test@pts/2
 3757 pts/2    S      0:00 -bash
 3786 pts/2    S      0:00 -bash

Ну и тд... чтобы процессы те которые указать не отображались... 

Автор: GrayCardinal 18.7.2006, 09:42
Эээ не. Лениво мне 3319 строк курочить. Да и квас кончился. Давай как-нить сам smile
gvim top.c
вперед и с песней... ну, можно с рамштайном, или с элвисом, кому как smile 

Автор: Basteon 18.7.2006, 14:41
Ок, если чего спрошу... 

Автор: Basteon 19.7.2006, 15:44
Хм, тут ещё мысля посетила...
А что в ядре процессами управляет, следит, ведёт статистику... где об этом почитать итд... 

Автор: GrayCardinal 19.7.2006, 19:45
Basteon, 
kernel/sched.c
Там еще штук (тысяч) десять строк. Что-то конкретное интересует ? smile 

Автор: Basteon 20.7.2006, 03:25
Собственно по ядру можно полную структуру... что гед и что за что отвечает, но пологаю что всё- это очень много можно остановиться на процессах, их управлении, а так же то из-за чего может возникнуть kernel-panic.

По top-у интеерсно откуад он берёт информацию о процессах. Это как то с ядром же связано?!
Да и ещё литературу какую-нибуть по програмированию для unix(в том же плане). 

Автор: GrayCardinal 20.7.2006, 08:48
Basteon, 
Ууу... Ну литературы то уж расплодилось. Единственное что могу порекомендовать, это
Linux Device Driver O'reilly (кажись правильно написал, книжка лежит под GPL на www.oreilly, только домен забыл smile )

Насчет кодинга под никсы. Да там... Нужно GVim (7.x), gcc (4.x), AAP (www.a-a-p.org) и можно лезть в 
/usr/share/man/man2
Там всё smile Если линь, то там даже написано про совместимость с другими *nix. 

Насчет AAP'а. Чтоб со старичками make'ами не заморачиваться можно одну строчку написать
:program test : main.cpp ...
и 
$ aap
И ноупроблем. аапчик так же установит, удалит, сконфигурит, в общем нужная вещь smile

Еще книжка - Брюс Моли "Unix/Linux Теория и практика программирования". Ничего круче пока не встречал. В сетке правда не видел smile

ЗЫ
рекламу ААПа толкаю, ибо, ИБО достало с ./configure и libtool всякими возиться smile
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)