Лекарство от падающих WM'ов :) (X wm wrapper example)
Ключевые слова: X, wm, wrapper, example, (найти похожие документы)
_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _
From : Yuriy Kaminskiy 2:5020/517.21 18 Oct 98 16:47:32
Subj : Лекарство от падающих WM'ов :)
________________________________________________________________________________
Hello All!
После нескольких падений WM'ов, написал вот такую приблуду [запуск -
вставьте runwm перед именем вашего wm; при падении wm по сигналу, он его
перезапускает]:
===Makefile===
prefix = /usr/local
exec_prefi = $(prefix)
bindir = $(exec_prefix)/bin
LDFLAGS=-L/usr/X11R6/lib -lX11
all: runwm
install: all
install -o root -g root -m 755 runwm $(bindir)/runwm
===Makefile===
===runwm.c===
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <X11/Xlib.h>
int main(int ac, char *av[]) {
Display *d;
if(ac<2) {
fprintf(stderr,"Usage: runwm program [args...]\n");
return 1;
}
if((d=XOpenDisplay(NULL))==NULL) {
fprintf(stderr,"Cannot open display!\n");
return 1;
}
for(;;) {
pid_t pid;
if((pid=fork())==0) { /* child */
execvp(av[1],&(av[1]));
_exit(127);
} else if(pid<0) { /* error */
XCloseDisplay(d);
perror("fork");
return 1;
} else { /* parent */
int status;
if(waitpid(pid,&status,0)<0) {
perror("waitpid");
XCloseDisplay(d);
return 1;
}
/* WM `normally' terminated */
if(WIFEXITED(status)||
(WIFSIGNALED(status) && WTERMSIG(status)==SIGTERM)) {
/* возможно, SIGPIPE тоже следует считать `нормальным' ? */
XCloseDisplay(d);
return WEXITSTATUS(status);
}
/* else - continue */
}
}
}
===runwm.c===
--
Yuriy Kaminskiy.
--- Gnus v5.2.25/XEmacs 19.14
* Origin: Kyle Katan's station (2:5020/517.21@fidonet)
1, glitch (?), 12:04, 12/07/2005 [ответить]
| +/– |
А куда они падают интересно?
Как часто? | |
|