@2 Problém je, že si nejsem jist, jestli opravdu dneska je možné psát multiplatformě pro všechny linuxy, které jsou k mání. O psaní na další Unixy už ani neuvažuju. Proto jsem problém uchopil tak, že stavím své knihovny na základe předem daných user stories. V tomto případě je to požadavek na spouštění procesů, synchronizaci s nimi a základní komunikaci (roury). Je mi v celku jedno, co je na implementaci, jestli mám pro každou verzi linuxu vlastní komplet implentaci, nebo to mám v posixu, nebo prasácký zdroják plný ifdef endif
Na clone se podívám, ale pokud je vfork jen alias pro příkaz clone s určitými příznaky, tak by to mělo stačit.
Čekání na cizí proces, tyhle problémy jsou právě pěkně řešeny ve Windows a stačí se inspirovat. Pokud jeden proces chce čekat na jiný, pak musí jeho PID převést na interní HANDLE (rukojeť) pomocí funkce OpenProcess. Ve funkci uvádí PID procesu a požadovaná oprávnění. V případě čekání na ukončení stačí oprávnění SYNCHRONIZE. Pokud to oprávnění získá, obdrží process HANDLE, se kterým může jít do funkce WaitForSingleObject. Pokud získá process oprávnění číst exit code, tak si jej lze posléze vyzvednout přes GetExitCodeProcess. Co vím, tak lze takhle čekat i na process běžící pod UAC. Pokud to právo nezíská, nezíská ani HANDLE a pak zbývá jen analýza chyby GetLastError. Pokud je tam ERROR_ACCESS_DENIED, tak process běží, pokud je tam ERROR_NOT_FOUND tak už neběží. Ale tohle není moc spolehlivé, protože na uvolněné PID může být v následující milisekundu umístěn jiný process.
Schopnost synchronizovat se s cizím processem vidím jako důležitou vlastnost třeba u různých služeb či démonů, kdy chci ukončit process, který vlastní třeba nějaký zdroj, který ukončením uvolní.Pokud mě takový process poslechne, pak mám mít právo se dozvědět, že právě skončil.
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 51 064×
Přečteno 23 939×
Přečteno 22 871×
Přečteno 20 953×
Přečteno 17 760×