LINUX.ORG.RU

[C] запущен ли процесс

 


0

0

Доброго времени суток ЛОР. Как с помощью Си зная только имя процесса узнать, запущен он в данный момент или нет?



Последнее исправление: shk (всего исправлений: 1)

и ес-но единого варианта для всех ОС нет

ahonimous
()
#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, SIGQUIT); // убиваем, если flag != 0
			}
			else{
				kill(pid, SIGUSR1);
				exit(0);
			}

		}
	}
	if(flag)
		exit(0); 
	closedir(dir);
}
Eddy_Em ☆☆☆☆☆
()

под именем процесса подразумевается pid или имя исполняемго файла?

anonymous
()

думаю, ответ нужно искать в районе исходников утилиты killall.

оно умеет:
killall -0 proc_name

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