Open fgretief opened 3 years ago
The problem here is that the C kill
function does not exist on Windows, so implementing it in jnr-posix would mean emulating POSIX kill behavior on top of equivalent Win32 functions. We have done that in some limited cases when the Windows behavior is easy to match to the POSIX behavior, but I do not know the appropriate calls to make here.
This SO answer might be a clue: https://stackoverflow.com/a/1916668
Since we have the pid in hand, it may be simple to just add these Win32 functions to the ones we already have bound here: https://github.com/jnr/jnr-posix/blob/40fa74d5a4a70cb1dc0773740639f33e57e8c010/src/main/java/jnr/posix/WindowsLibC.java
Then call them from the WindowsPOSIX implementation of kill
.
Note this example is only for terminating the process, so we probably should only use this code for SIGKILL and still raise an error for others (until we have a way to send them).
Wanna take a shot at a PR?
Another SO post seems to indicate that KILL is the only one for which we have a clear equivalent on Win32:
https://stackoverflow.com/questions/140111/sending-an-arbitrary-signal-in-windows
So I think we could add jnr-posix kill(pid, KILL)
support but not much else.
We get the exception below when pressing CTRL-C when running the application via Maven that uses a custom Maven plugin. The plug-in uses the jnr.posix.POSIX.kill() function to terminate the running program. But the kill is not implemented for Windows in jnr-posix. Because of this we have to open Process Explorer and manually kill the java process that is left running in the background. The first 50 times this was ok, but it is getting very tiresome.
What will it take to implement the kill method for Windows in jnr.posix?
For reference: https://github.com/yamcs/yamcs-maven-plugin/blob/2c4d4db96aeeefecd45aa2ba5e5bb646f307a67c/src/main/java/org/yamcs/maven/JavaProcessBuilder.java#L61