Odpovídáte na názor ke článku Temná strana linuxu - spouštění procesů.
'Zvedněte ruku, kdo tohle někdy řešil?' --- zvedam ruku. A rozcarovan jsem z toho byl podobne, vcetne toho problemu jak se dozvedet ze selhal exec (to jsem nakonec nevyresil, jen pred forkem testuju ze dany soubor existuje, ale to neni idealni protoze ho nekdo mezitim muze smazat a taky kdyz na zacatku chce interpretr jako treba #/bin/bash a ten by nahodou neexistoval tak to velice zahadne selze --- v takovem pripade po forku uz exit()nu z celeho programu).
Mam nasledujici `API':
int run(char* direcory, int* filedes, char* command, ...)
kde directory je adersar ve kterem bude program spusten, filedes je pole deskriptoru, ktere budou zachovany (a remapovany na nejnizsi cisla), command je format string prikazu, kde se argumenty oddeluji specialnim znakem takze je mozne napsat treba
run(".", (int[]){0,1,2, pd[1],-1}, "prog01%s01%s", arg1, arg2);
a ono to spusti prog arg1 arg2 propojeny s mym programem pres pd[1] (on ho ma na deskriptoru
3) a zbytek ma obvykly stdin/stdout.
Delal jsem to pomoci /proc/PID/fd, coz je adresar ve kterem jsou vsechny otevrene deskriptory videt jako soubory, takze je mozne je postupne probrat a pozavirat, ty ktere nechci zavrit pred tim zduplikovat a nakonec je zduplikovat na zacatek (protoze ty puvodni jsou zavrene) a docasnych duplikatu se zbavit. Ale ma to taky nevyhodu, pokud ma spusteny proces mode 711 a je vlastnen rootem a ten kdo ho spusti je non-root tak tento adresar nejde precist.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 57 605×
Přečteno 27 722×
Přečteno 26 403×
Přečteno 24 367×
Přečteno 22 864×