And as always with this meme: Both Windows and Linux can ask a process nicely to terminate or kill it outright. And the default for both is to ask nicely.
on windows a process can get in a state so that it is impossible to make it go away, even with process explorer or process hacker. mostly this also involves the bugged software becoming unusable.
I encounter such a situation from time to time. one way it could happen is if the USB controller has got in an invalid state, which one of my pendrives can semi-reliably reproduce. when that happens, any process attempting to deal with that device or its FS, even the built-in program to remove the drive letter, will stop working and hang as an unkillable process.
Linux has that issue too. A process in an uninterruptible blocking syscall stays until that syscall finishes, which can be never if something weird's going on.
Because that's better for the software, Linux however kills it outright when it doesn't respond at all. Windows just... Waits. And you can't really hardkill the processes from the task manager. Or at last my last knowledge is that.
League of Legends captures and discards the ALT-F4 keystroke combination.
Microsoft trusts app developers to use Microsoft's standards (such as terminating the process when a close message is received) and they shouldn't. App developers like Riot have taken advantage of this trust and tuned their apps to act differently than expected, and include code which makes the app minimize to the system tray instead, or force the user to answer questions ("Are you SURE you want to close?"), or do nothing at all.
You can easily make a program unkillable (or to be more precise untermable) on Linux. Here's a simple bash script that will do that.
#!/bin/bash function finish {
while true
do
echo "Can't kill me."
sleep 10
done
} trap finish EXIT
trap finish TERM
trap finish INT
while true
do
echo "Still alive."
sleep 10
done
Hitting the X in Windows and hitting the X in Linux both cause the application to start a save yourself routine. From the OS standpoint they're not far off.
The problem is we have a lot of confirmation bias in windows because every time we want to close an application that's not working, that save yourself call has to sit around for a hellaciously long time out followed by a telemetry call so that Microsoft can track that it happened.
It's pretty rare that Linux apps don't just close.
Actually no, it's just that the programs on Linux usually accept SIGINT, SIGTERM, etc pretty gracefully. Some are even smart enough to handle it on a thread hang. SIGKILL is last resort.
Lots of Windows applications like to ignore the close request because Windows doesn't have signals and instead you can only pass a window name to request exit which is the same as clicking the close button.
So any hung software won't respond and you have to terminate it.
My problem with Windows is that when I want to eject a USB drive, Windows refuses to do so, refuses to tell me what program is apparently still using the drive, and certainly refuses to kill that program. I am removing the drive. I can't just not remove it!
I've found that in those cases its usually explorer that's the culprit. Just having the removable drive open in explorer is enough to keep windows from being able to unmount the drive.
I haven't seen that in a while. When you see that it means either that the service didn't handle the terminate signal correctly or that is is busy doing something. (Sometimes both)
you forgot that you have to spend about 2 minutes with windows "searching for a solution" (who knows what that does??) and then another minute reporting it to microsoft
TerminateProcess() is pretty reliable, but it doesn't form part of the C signals stack on Windows like kill -9. So for instance, if you're doing process control on Python, you need to use a special Windows-only API to access TerminateProcess().
Kill -9 is a command on Unix and Linux to send signal 9 (SIGKILL) to a process. That's the version of kill that is the most reliable and has immediate effect.
Taskkill is a Windows command line program. I believe that taskkill /f uses the TerminateProcess() API. This is more forceful than the End Task button on the Task Manager. There is a different End Process button on the Task Manager that does use TerminateProcess().
mainly wrong, by default kill send a SIGTERM, you can try SIGINT or SIGQUIT too, and in the end SIGKILL of course. Same in windows there is different way
I feel like I've had the opposite experience in the gui (maybe a KDE issue?) closing gui windows frequently lock up, and I find I frequently have to drop to the command line in order to properly kill some programs
That's because the end proces of the GUI sends a sigint, which does jack shit if the program hangs, you only archieve for a higher parent process to obtain it until it can off itself gracefully. You need to right click the process and send a sigkill signal to emulate the command line.
Is there some Linux equivalent to "ctrl + alt + del?" I get that killing a process from the terminal is preferred, but one of the few things I like about windows is if the GUI freezes up, I can pretty much always kill the process by pressing ctrl+alt+del and finding it in task manager. Using Linux if I don't already have the terminal open there are plenty of times I'm just force restarting the computer because I don't know what else to do.
Ctrl+alt+F1/F2/F3 etc.
It lets you switch to another terminal session, where you can use something like top/htop for a commandline equivalent to task manager.
That's what I don't get about what they said above. If the Windows desktop freezes up, Task Manager won't open either (happened to me quite some times over the years - less so since they moved to the NT kernel though). What you mentioned always works short of kernel panic.
Do you have enough swap allocated to your linux machine? I found that my GUI froze frequently due to not having enough of it when the computer was under heavy load.
At that point you can just hard restart as well. Most motherboards accept 10 to 15 seconds of power button as "my OS is fucked please help" and restart the machine for you.
btw funny story since many comments mention NFS/CIFS:
I have a share mounted at /smb and the server sometimes just dies so when I want to unmount it I run umount /smb but my shell (zsh) hangs after typing umount /sm and the b doesn't even show
I guess zsh does a kind of stat() on everything you type but bash came to save the day
I don't know if clean ZSH does it, but if you have the zsh-syntax-highlighting plugin, it tests if the path you're typing exists every time you edit the line.