Názor ke článku Temná strana linuxu - spouštění procesů od Ondřej Novák - @14 1. Vytvořte rouru (CreatePipe) 2. jeden konec zduplikujte, tak...

  • 23. 1. 2012 13:48

    Ondřej Novák (neregistrovaný)

    @14
    1. Vytvořte rouru (CreatePipe)
    2. jeden konec zduplikujte, tak aby se nastavilo sdílení (InheritHandle). Já to dělám s DUPLICATE_CLO­SE_SOURCE, prostě jen kvůli tomu nastavení sdílení.
    3. Nastavte tento konec do STARTUPINFO a zapněte příznak "UseStdHandles"
    4. Vytvořte process CreateProcess
    5. Zavřete ten konec předaný do nově vytvořeného procesu
    6. Proveďte IO operaci na opačném konci podle směru.
    7. Obdržíte chybu něco ve stylu "broken pipe" a to i v případě, že spuštěný proces bude ještě bežet.
    8. Ve spuštěném procesu pokud handle vyzvednete přes GetStdHandle a provedete na něm IO, obdržíte ERROR_INVALID_HAN­DLE

    Správnější postup by měl být, že na své straně ten druhý konec zavřete až v okamžiku, kdy si child process vyzvedne stdHandle a to zduplikuje. Ale to je šílenost. Druhé řešení je nezavírat ten konec, a při I/O s rourou si vždcky pošéfovat test, zda process ještě běží, aby to I/O bylo možno přerušit.