runscript.exe and process termination
Siep Kroonenberg
siepo at bitmuis.nl
Sat Sep 19 15:01:23 CEST 2020
On Sat, Sep 19, 2020 at 06:51:09AM -0300, Paulo Roberto Massa Cereda wrote:
> Dear friends in the TL list,
>
> TeX Live on Windows uses wrappers around common tools (e.g. latexmk, arara
> etc.) based on the runscript.exe program (runscript.tlu). It is a clever
> approach to provide a consistent, unified entry point to deploy binaries in
> the Windows environment.
>
> While working on issues opened for arara, there were a few mentions that
> process killing on Windows did not work as expected. We (the island) decided
> to investigate what was going on.
>
> To give you some context, we summarized our findings in
>
> https://gitlab.com/islandoftex/arara/-/issues/39
>
> These findings show one real problem on Windows: Processes started from
> editors based on Qt's process management cannot be easily killed because
> their subprocesses will not be terminated (that is how the Windows API
> works).
>
> Now, while we know that especially in this case it is not a problem of the
> wrapper script per se, we would like to point out some code excerpts from
> popular editors:
>
> - TeXworks kills processes using Qt's kill method which, as detailed in the
> issue, does not kill subprocesses:
>
> https://github.com/TeXworks/texworks/blob/c6e85a8e3248ee4b15cd3022ccb77a13d8a42f8d/src/TeXDocumentWindow.cpp#L2786
>
> - TeXmaker kills processes with the same method (line 8165 in texmaker.cpp
> of the current sources of version 5.0.4).
>
> - TeXStudio has written a wrapper (ProcessX) around QProcess but uses the
> same approach for killing applications.
>
> At least three of the more common editors use Qt's method of killing
> processes which will not kill child processes on Windows (because Windows
> does not enforce this concept like unices). That means that killing the exe
> wrapper will actually not propagate the kill signal to the actual process
> that was supposed to be killed which is kind of unexpected.
>
> We (the island) were wondering if it would be a good idea for the
> runscript.exe wrapper to kill underlying processes on termination to remove
> the additional “layer” of processes kept alive. I don't know much of the
> inner workings of the wrapper, so apologies to the wrapper maintainers if we
> are asking something too troublesome to implement, as we really do not want
> to add more complexity.
I looked into this at some time in a different context, but could
not find a good solution. I shall look into it again.
--
Siep Kroonenberg
More information about the tex-live
mailing list.