A script that kills previous instances of itself upon running not killing child processes
I'm likely going to explain this clumsily, so apologies in advance:
I have the following script:
The bulk of it you can ignore, the main points are:
* the function killScript is meant to check for lock files in /var/run (excluding lock files created by the current instance of the script) and kill the pid inside the lock file.
* a tail is kicked off against a log file, and the output parsed into a separate logfile (if anyone actually cares, I can show sample input for the script, and explain what everything does, but it's not really relevant to my problem).
* The goal is that this script is run periodically on cron. Every time it's run, the last running instance of the script is killed, and a new one is started
So here's the issue. The script starts a child process, and just killing the first processes pid doesn't kill the child process. It just keeps running and running until manually killed. As seen below:
*
*
* So now the script is running, and there are two pids
* In the first terminal the script exited back to a prompt and says Terminated
*
* and now I have the child process of the script still running and doing stuff.
So yeah, this is my problem. How can I accomplish my goal of making a script that can kill previous instances of itself when it's run if the script spawns child processes?
Also, this script is far from done. There's still error checking to be added, and comments, and general tidying up. But I've reached this point and don't know how to proceed.
Perfect. That works perfectly (in your original post you didn't say the -- required the - infront of the pid as well) . I updated the killScript function to:
and everything runs as I would expect it to. (I also made checking stricter just to be safe)
Thanks for bearing with me.
Last edited by DeCoTwc; 08-16-2012 at 10:31 PM..
Reason: Tweaked function
Hi there,
I'm trying to run a script remotely on a server in a particular directory named after hostname which already exists, my login session gets killed as soon as I run the below command. Not sure what is wrong, is there a better way to do it ?
Note: I can also use nohup command to run... (14 Replies)
Hello to all @here,
as Iīm new to this forum, I will try to start in a easy way for my first post. Iīm not beginner in scripting, but also not a proffessional. So please keep easy, if I donīt understand your explanation at once ;) I donīt mean it in a bad way!
Here is the Problem:
There were... (2 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)
I have a parent process which will start 36 child process. This I achieved by using the 'for loop'.
In Parent.sh:-
./Child.sh <arg1> <arg2> ... &
If I execute "ps -ef | grep Child.sh", I can see 72 child processes running at the background. I mean I can see the duplicate of each process.
... (2 Replies)
Is there a way to monitor certain processes and if they hang too long to kill them, but certain scripts which are expected to take a long time to let them go?
Thank you
Richard (4 Replies)
Sorry for all the threads. I am almost done. I ahve a bash script that is launching a diags program then copying the .html over my client. then it does the following line
/opt/firefox/firefox report.html
it launches it fines but the program waits for me to close the window or kill the script.... (2 Replies)
Hello,
I'm trying to write a script that checks for previous instances of the same script which may still be running (this script is scheduled to run every 30 minutes). I want to somehow use the pid from each instance to make sure the previous one isn't running before continuing with my... (5 Replies)
I would like to allow only one instance of a script to run at any moment.
I've tried the following solution to count the instances but the result is always the number of running instances plus one and I can't find the problem
ps -ef | grep $0 | sed '/^$/ d' | sed '/grep/ d' | wc -l
Please... (2 Replies)