My AIX-based accounting program runs an end-of-day process that requires all users to be logged out. Sometimes I have a user that leaves for the day and forgets to logout. Is there any way I can cleanly log a user out without killing their process?
No. Logging a user out means that their login shell has been terminated. If the user used nohup to start jobs that they wanted to continue running after they were logged out, killing off all of their terminal sessions might not be a big deal; otherwise any jobs that they started and hoped would run through the night will also be killed if you terminate their login sessions.
Last edited by Don Cragun; 10-18-2016 at 08:01 PM..
Reason: Fix typo: s/there/their/
This User Gave Thanks to Don Cragun For This Post:
Is there any way I can cleanly log a user out without killing their process?
I am not quite sure what you mean with "cleanly". To log a user out the classical method is to terminate (that is: use the kill-command to send a SIGTERM signal to the process) the login shell of this user.
Note, that you use SIGTERM (kill -15) rather than SIGKILL (kill -9). Signal 15 tells the process to kill itself (after reasonably cleaning up) and well-behaved processes do exactly that: they clean up their stuff - temporary files, inter-process communication facilities, forked children, etc. - and then quit.
Only ill-behaved (read: badly programmed programs) processes or ones in real deep trouble (deadlocks, ...) ignore this signal and have to be killed with signal 9, which is not a real signal but a command to the OS to kindly purge the process from existence without giving it any chance of intervention.
To log out a certain user without any detriment to the OS do the following:
This will take care even of the processes started with nohup.
I am not quite sure what you mean with "cleanly". To log a user out the classical method is to terminate (that is: use the kill-command to send a SIGTERM signal to the process) the login shell of this user.
Note, that you use SIGTERM (kill -15) rather than SIGKILL (kill -9). Signal 15 tells the process to kill itself (after reasonably cleaning up) and well-behaved processes do exactly that: they clean up their stuff - temporary files, inter-process communication facilities, forked children, etc. - and then quit.
Only ill-behaved (read: badly programmed programs) processes or ones in real deep trouble (deadlocks, ...) ignore this signal and have to be killed with signal 9, which is not a real signal but a command to the OS to kindly purge the process from existence without giving it any chance of intervention.
To log out a certain user without any detriment to the OS do the following:
This will take care even of the processes started with nohup.
For a list of users logged in use:
I hope this helps.
bakunin
I will note that kill -9 won't hurt the OS. But, it may leave files partially updated, may leave locks locked, may leave anything that a process was working on partially done. All of those issues may also affect processes killed by kill -15; but at least processes killed by kill 15 have a chance to catch the signal, clean up the state of anything that hasn't been completed, and exit normally. But, arbitrarily logging out users and killing the jobs they were running (especially the job that had been running for 10 hours and would have successfully finished if allowed to run 5 more minutes, but will need to run for another 10 hours and 5 minutes since it was killed) is a sure way to have irate users banging on your desk the next morning.
Note also that you can get the list of users currently logged in without needing the cut command in the pipeline with just:
This User Gave Thanks to Don Cragun For This Post:
Yes, but only in principle. If a process has allocated a lot of shared memory which it *should* free on exit but won't (because it is killed with signal 9) that may not be hurtful for the OS directly but it definitely will make the runtime stability of the system deteriorate. My bad for not articulating that more specifically.
Quote:
Originally Posted by Don Cragun
But, arbitrarily logging out users and killing the jobs they were running (especially the job that had been running for 10 hours and would have successfully finished if allowed to run 5 more minutes, but will need to run for another 10 hours and 5 minutes since it was killed) is a sure way to have irate users banging on your desk the next morning.
Like above: yes and no. You are right if we operate a classical Unix system, but in the industry this is rarely the case. Most companies have either specialised non-personal users for this sort of jobs which could easily be excluded from the general purge i proposed - it was just a general suggestion on how to do it - or have job schedulers in place. Typical IBM shops (it was mentioned they run AIX, which is IBMs Unix) are coming from the host and most have an (or even several) IBM mainframe(s) along with AIX, many have Linux too (on x86- as well as POWER-platforms) and Windows servers. In such a diverse environment you don't use cron as a scheduler but something more platform-independent: Control-M from BMC, for instance (but also UC4 and many others).
This in turn means: if a user has a running process he shouldn't have it run anyways and it can be killed for convenience at any time.
About the superfluous cut: yes, you are right. Point taken.
I hope this helps.
bakunin
These 3 Users Gave Thanks to bakunin For This Post:
Hi ,
I have a list of application process id's.
Is there a way to kill all the process listed below using the script, except the once which are starting with " Genesis "
adm 1522 ABC_Process.tra
adm 1939 Genesis_Process.tra
adm 2729 Genesis_Archive.tra
adm 3259 xyz_Process.tra (5 Replies)
I had issues with processes locking up. This script checks for processes and kills them if they are older than a certain time.
Its uses some functions you'll need to define or remove, like slog() which I use for logging, and is_running() which checks if this script is already running so you can... (0 Replies)
Hi friends,
i m in big trouble....
i have one script which connects two server ...like below..
script1.sh
-------------------------------------
bash test.sh &
eval x=$@
export x=`echo $x`
#echo $x
#
ssh user@8.2.5.6 bash /mbbv/location/script.sh $x|sed '/Binary file/d'... (1 Reply)
Hi,
First, I am running a scipt.While the script is running I realize that I dont want the script to be run so I am killing the script externally.Before the process gets terminated or killed it should delete all the temporary files created by the script.How to do this?Can anyone help me?
... (3 Replies)
Hi Friends,
I am new to this forum as well as new to shell scripting.
I have a problem here and i need someone to solve this.
Let us consider there are two processes(abc & def).There is a script which kills these two processes(i.e killtheprocess abc). Here abc is the argument .
There is a... (1 Reply)
Hello,
I need to create a process that will kill a specific process if it's running. Let's just say the process is called win, actually called something else. It could be running multiple times on the machine and I would want to kill them all. Below is the code I have written so far, and it... (6 Replies)
I can kill running processes on my linux red hat system using ctrl-c but cannot do it from command line of another terminal using kill -2 pid. Although I can kill them from command line using kill -9 pid and other signals. I would like to do it using the kill -2 pid.
Thanks for your suggestions (6 Replies)
can I do
ps -ef | grep <process_name>
and kill the process is it exists?
and send a mail to me that the process was found and killed
Thanks much...
KS (4 Replies)
in aix, do a who -uH, by seeing the pts/number, we can do a
ps -ef | grep pts/number to see what processes the terminal is running, then how do we kill them? (3 Replies)
I have a stubborn process on my OpenBSD box that just refuses to die. It is taking up about half a meg of memory and refuses to die. It appears to be an errant gzip process that was executed from the console on 06 Jan 2002.
Here is a snippet of my attempts to kill the gzip process
... (7 Replies)