List jest może trochę OT, w razie czego proszę o skierowanie mnie na właściwą listę.
Problem jest taki, że usiłuję zainstalować sobie dockappa wmmaiload, nie ma go na razie w PLD więc kompiluję go ze źródeł (może napiszę speca, jak go już zmuszę do działąnia, tak w ramach podziękowań). Posiada on taką funkcjonalność, że po kliknięciu myszką odpala dowolny program, w moim przypadku mozilla-thunderbird. Robi to w ten sposób:
wywołuje funkcję my_system("mozilla-thunderbird",NULL)static int my_system(char *cmd, char *param) {
int pid;
extern char **environ; if (cmd == 0) return 1;
pid = fork();
if (pid == -1) return -1;
if (pid == 0) {
pid = fork();
if (pid == 0) {
char *argv[4];
char fcmd[2048];
strncpy(fcmd, cmd, 2047);
if (param) strncat(fcmd, param, 2045 - strlen(cmd));
argv[0] = "sh";
argv[1] = "-c";
argv[2] = fcmd;
argv[3] = 0;
execve("/bin/sh", argv, environ);
exit(0);
}
exit(0);
}
return 0;
}Ta funkcja robi w miarę oczywistą rzecz (jeśli nie brać pod uwagę drugiego fork() nie wiadomo po co), tylko że thunderbird odpalony w ten sposób wywala się w 9 przypadkach na 10. Wyświetla "Memory fault" zanim jeszcze odpali się interfejs graficzny.
Jest to dziwne biorąc pod uwagę następujące fakty:
- odpalony z ręki nie wywala się nigdy
- odpalony z innego dockappa (wmdrawer), nie wywala się nigdy
- jeśli zamiast thunderbirda odpalę coś innego z wmmaiload (gvima) to nie wywala się
Thunderbirda zbudowałem ze speca i ostatnio uaktualniłem biblioteki, więc może to dlatego, ale czemu tylko z jednego dockappa?
Sprawdziłem jak odpalanie aplikacji jest robione w wmdrawer, jest tam bardzo podobna funkcja:
void execCmd (const char *cmd) {
int cpid; cpid = fork ();
if (cpid == -1) {
printf ("%s error: can't fork\n", PACKAGE);
}
else if (cpid == 0) {
setsid ();
execl ("/bin/sh", "/bin/sh", "-c", cmd, NULL);
exit (EXIT_SUCCESS);
}
}Różnica polega w zasadzie tylko na wywołaniu setsid. No ale, może czegoś nie wiem. W każdym razie przepisałem ten kod do wmmaiload (tak żeby pasowało), ale nic to nie zmieniło, nadal nie lubi thunderbirda. W tej chwili zabrakło mi już pomysłów jak mogę to dalej debugować i próbować naprawić. Będę wdzięczy za pomoc.
Tomek Grzejszczyk
_______________________________________________________ złota zasada - kto się nie zna, niech się nie wypowiada
