LINUX.ORG.RU

Посмотреть как это делает ps? Из /proc очевидно.

frey ★★
()

платформозависимо, ищите например на pypi.python.org

hizel ★★★★★
()

самое шустрое/удобное - почитать /proc

real_maverick ★★★
()
Ответ на: комментарий от Hetor
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <dirent.h>
#include <signal.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <getopt.h>
#include <pwd.h>
#define PROC_BASE "/proc"

void readname(char *name, pid_t pid){ // считать имя процесса из /proc/...
	char *pp = name, byte, path[256];
	int cntr = 0, file;
	sprintf (path, PROC_BASE "/%d/cmdline", pid);
	file = open(path, O_RDONLY);
	do{	// считываем имя без слешей
		read(file, &byte, 1);
		if (byte != '/') *pp++ = byte;
		else pp = name;
	}
	while(byte != EOF && byte != 0 && cntr++ < 255);
	close(file);
}

void killbrothers(int flag){
	DIR *dir;
	struct dirent *de;
	pid_t pid, self;
	char name[256], myname[256];
	if (!(dir = opendir (PROC_BASE))){ // открываем директорию /proc
		perror (PROC_BASE);
		exit (1);
	}
	self = getpid(); // свой идентификатор
	readname(myname, self); // свое имя процесса
	while ((de = readdir (dir)) != NULL){ // пока не дойдем до конца директории
	// пропустим, если директория не указывает на процесс, или указывает на self
		if (!(pid = (pid_t) atoi (de->d_name)) || pid == self)
			continue;
		readname(name, pid); // считываем имя процесса
		if(strncmp(name, myname, 255) == 0){ // если оно совпадает с self
			if(flag){
				kill(pid, SIGTERM); // убиваем, если flag != 0
			}
			else{
				exit(0);
			}
		}
	}
	if(flag) exit(0); 
	closedir(dir);
}
Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Эта функция ищет одноименные процессы и убивает их (если flag) или умирает сама. Для вывода списка процессов достаточно видоизменить readname, чтобы она писала имя процесса и его pid, а «убийства» убрать. Если хотите сортировать - добавляйте еще какой-нибудь qsort.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от hizel

клоны винды не поддерживаются - очевидно же

lester ★★★★
()
Ответ на: комментарий от hizel

Совместимость с фряхами, виндами, и т.д. мне не нужна, ибо пишу чисто для себя (программа для запуска игр: закрывает все окна, убивает WM, проверяет, запущен ли mplayer, если нет - включает музыку с определенным плейлистом, запускает игру (nexuiz или q3, например), после чего вырубает музыку и запускает WM). Всем спасибо, попробую набыдлокодить чего-нибудь вечером.

Hetor
() автор топика
Ответ на: комментарий от hizel

>тю тю :}

Чего тютю? BSD тоже имеют /proc, просто это опционально.

volh ★★
()
Ответ на: комментарий от Eddy_Em

>А как же во фряхе работает ps?

Во фряхе в отличие от линакса есть вменяемый API, а не онанизм с файлами там, где он не к месту.

linuxfan
()
Ответ на: комментарий от linuxfan

>Во фряхе в отличие от линакса есть вменяемый API, а не онанизм с файлами там, где он не к месту.

Это говорит человек с ником linuxfan?

Hetor
() автор топика
Ответ на: комментарий от Hetor

>Это говорит человек с ником linuxfan?

Это говорит человек, который видел исходники ps. После такого виндовый toolhelp кажется шедевром инженерной мысли.

linuxfan
()
Ответ на: комментарий от linuxfan

Это говорит человек, который видел исходники ps.

И чего там сложного? Очень удобно: readdir + иногда open - и все. И не надо мучиться с кучей ioctl'лов.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

>И чего там сложного?

Ну ок, давай ты попробуешь выяснить RSS процесса? Интересно, как тебе понравится форматная строчка scanf'а для этого дела. Как по мне, так ioctl на пару порядков читабельней.

linuxfan
()
Ответ на: комментарий от Eddy_Em

>Так по-русски бы и говорили.

man 5 proc. Мне модные нынче вебдванольные замашки как-то чужды.

Подозреваю также, что /proc/self/status постарше будет, чем RSS в его вебдванольном понимании.

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