http://qs321.pair.com?node_id=586478


in reply to Re: Invoking the Windows command line for selected directories
in thread Invoking the Windows command line for selected directories

This works ! But unfortunately I don't understand how :-(

Can't find anything coherent in the documentation of system and exec. perldoc just says:

If there is more than one argument in LIST, or if LIST is an array with more than one value, starts the program given by the first element of the list with arguments given by the rest of the list.
Although this only makes things less clear.

Where can I read the documentation about your solution ?

  • Comment on Re^2: Invoking the Windows command line for selected directories

Replies are listed 'Best First'.
Re^3: Invoking the Windows command line for selected directories
by BrowserUk (Patriarch) on Nov 28, 2006 at 15:28 UTC

    Um. Off the top of my head, I don't know where it actually documented. It's one of those things that I picked up by osmosis through reading PM. Probably from tye. He's the source of most of the useful stuff regarding Perl and Win32 around here.

    As for how it works, that's fairly easily explainable. It is a Win32-only special case coded into the sources. If the first argument to system is (exactly) '1', then the code adds the CREATE_NEW_PROCESS_GROUP flag to the creation flags parameter passed to CreateProcess(), which has the required effect of 'detaching' the process created from it's parent.

    See also Re: How does system(1,"foo") work on Windows?.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Ah, so it's CREATE_NEW_PROCESS_GROUP. In one of my attempts I tried the same using Win32::Process instead of system(), and looking through the flags I thought DETACHED_PROCESS might do the job (it doesn't). Strange that I didn't even notice CREATE_NEW_PROCESS_GROUP.

      Thanks

        DETACHED_PROCESS is used to create processes that don't have a console. They are 'detached' from the console; think *nix-style deamon processes and win32 services (though the latter can also have a console!).

        The gory details.


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.