Did you run is with parameters?
Did you press Ctrl-C afterwards?
No and no. Sorry! :-) Anyway, I redid the test and I got something like this:
Quote:
./kill-all-agents: line 4: 11146 Terminated ./run-any-agent $agent
./kill-all-agents: line 4: 11147 Terminated ./run-any-agent $agent
./kill-all-agents: line 4: 11148 Terminated ./run-any-agent $agent
Jobs were killed
Then I hit Ctrl+C. However, after a few seconds, the programs started back up. That was annoying! I'll look at your other suggestions and report back. (Though it probably won't be today since I need to be heading out; I'll get back tomorrow for sure.)
Thanks much,
DTW
---------- Post updated 01-21-10 at 10:32 AM ---------- Previous update was 01-20-10 at 06:07 PM ----------
Quote:
Then I hit Ctrl+C. However, after a few seconds, the programs started back up. That was annoying! I'll look at your other suggestions and report back. (Though it probably won't be today since I need to be heading out; I'll get back tomorrow for sure.)
I tried it again this morning. I typed:
Code:
sh ./run-all-agents MyProgram1 MyProgram2
The programs started up nicely. Then, to kill them, I typed:
Code:
sh ./kill-all-agents MyProgram1 MyProgram2
And then pressed Ctrl+C. This is what I saw:
Code:
./kill-all-agents: line 4: 13954 Terminated ./run-any-agent $agent
./kill-all-agents: line 4: 13955 Terminated ./run-any-agent $agent
I was happy but that was short-lived; after a few seconds, the programs started back up. What gives? I tried typing the same thing a few times, but it did the same thing. The programs continue to run. What else can I try?
Thanks,
DTW
---------- Post updated at 10:41 AM ---------- Previous update was at 10:32 AM ----------
Just to be perfectly clear:
[1] The run-any-agent script has:
Code:
#!/bin/bash
#
# Usage
# From the agent directory:
# sh ./run-agent
#
TAC_AGENT_HOME=`pwd`
LIB=${TAC_AGENT_HOME}/lib
CLASSPATH=.
CLASSPATH=${CLASSPATH}:${TAC_AGENT_HOME}/bin
for i in $( ls ${LIB}/*.jar ); do
CLASSPATH=${CLASSPATH}:$i
done
java -server -Xmx1024M -Xms512M -cp $CLASSPATH edu.umich.eecs.tac.aa.agentware.Main -config config/$1.conf
[2] The run-all-agents script has:
Code:
#!/bin/bash
for agent in $*
do
./run-any-agent $agent & # run in background
done
[3] The kill-all-agents has:
Code:
#!/bin/bash
trap killsubs INT
killsubs()
{
echo "CTRL-C was pressed"
jobs -p|xargs kill
echo "Jobs were killed"
exit
}
for agent in "$@"
do
./run-any-agent $agent & # run in background
done
wait
Thanks,
DTW
---------- Post updated at 10:53 AM ---------- Previous update was at 10:41 AM ----------
But nothing seems to work. The programs keep going.
Thanks,
DTW
---------- Post updated at 11:34 AM ---------- Previous update was at 10:53 AM ----------
So, I eventually ended up restarting my machine...It looked like there were too many zombie processes for me to get rid of. I tried running the "run-all-agents" script again followed by the "kill-all-agents" but it seems impossible to stop the programs once they kick off.
DTW
---------- Post updated at 12:06 PM ---------- Previous update was at 11:34 AM ----------
I'm running out of ideas...I executed the following command:
Code:
ps aux | more
And then scanned my screen for any processes that I may have spawned using "run-any-agent". What I found surprising was that there were several instances of "run-any-agent" - each with different PIDs. Check these out:
[1]
Code:
DTW 5740 0.0 0.0 2988 1368 pts/0 S 11:30 0:00 /bin/bash ./run-any-agent MyProgram1
DTW 5741 0.0 0.0 2988 1372 pts/0 S 11:30 0:00 /bin/bash ./run-any-agent MyProgram2
DTW 5746 0.1 1.2 1197324 24304 pts/0 Sl 11:30 0:02 java -server -Xmx1024M -Xms512M -cp ...[There's a lot of more after this]
[2]
Code:
DTW 6264 0.0 0.0 2988 1364 pts/0 S 11:34 0:00 /bin/bash ./run-any-agent MyProgram1
DTW 6265 0.0 0.0 2988 1364 pts/0 S 11:34 0:00 /bin/bash ./run-any-agent MyProgram2
DTW 6270 0.1 1.1 1197184 23812 pts/0 Sl 11:34 0:02 java -server -Xmx1024M -Xms512M -cp...[There's a lot of more after this]
[3]
Code:
DTW 6317 0.0 0.0 2988 1372 pts/0 S 11:34 0:00 /bin/bash ./run-any-agent MyProgram1
DTW 6318 0.0 0.0 2988 1372 pts/0 S 11:34 0:00 /bin/bash ./run-any-agent MyProgram2
DTW 6323 0.1 1.1 1196944 23408 pts/0 Sl 11:34 0:02 java -server -Xmx1024M -Xms512M -cp...[There's a lot of more after this]
I realized that killing these processes "manually" using the "kill -9" command doesn't seem to do anything. For example I did:
Code:
kill -9 6323
But I'm not sure anything happened. What should I do? Why are these processes being spawned so many times? I'm not sure what's going on here.
If you are using script mentioned above & running all the programs in backgorund using & operator, you can use below command :
jobs -l
This will show all background process.
Cool. Thank you very much.
Quote:
kill -9 <process_id>
to kill as usual.
Thank you again.
---------- Post updated at 02:14 PM ---------- Previous update was at 02:11 PM ----------
So, I was looking at the kill-all-agents script here:
Code:
#!/bin/bash
trap killsubs INT
killsubs()
{
echo "CTRL-C was pressed"
jobs -p|xargs kill
echo "Jobs were killed"
exit
}
for agent in "$@"
do
./run-any-agent $agent & # run in background
done
wait
I was wondering - do these lines really need to be there?
Code:
for agent in "$@"
do
./run-any-agent $agent & # run in background
done
Aren't they starting the agents back up? I'm confused.
You should not use kill -9 (only as a very last resort). It causes zombie processes.
Perhaps the problem lies with the fact that the java process is a subprocess yet again.
What happens if you combine the two scripts into one and you use something like this:
Code:
#!/bin/bash
#
# Usage
# From the agent directory:
# ./run-all-agents AgentName1 AgentName2 ...
#
trap killsubs INT
killsubs()
{
echo "CTRL-C was pressed"
jobs -p|xargs kill
echo "Jobs were killed"
exit
}
TAC_AGENT_HOME=`pwd`
LIB=${TAC_AGENT_HOME}/lib
CLASSPATH=.
CLASSPATH=${CLASSPATH}:${TAC_AGENT_HOME}/bin
for i in $( ls ${LIB}/*.jar ); do
CLASSPATH=${CLASSPATH}:$i
done
for i in "$@"
do
java -server -Xmx1024M -Xms512M -cp $CLASSPATH edu.umich.eecs.tac.aa.agentware.Main -config "config/$i.conf" &
done
wait
You should not use kill -9 (only as a very last resort). It causes zombie processes.
Perhaps the problem lies with the fact that the java process is a subprocess yet again.
OK. Thank you for your thoughts.
Before I try your experiment, I commented out the following lines from your script:
Code:
for agent in "$@"
do
./run-any-agent $agent & # run in background
done
I guess it didn't do anything...
Next, I restarted my machine and ran the "run-all-agents" script like this:
Code:
sh ./run-all-agents MyProgram1 MyProgram2 MyProgram3
Then, I went through all the processes using the following command:
Code:
ps aux | more
And killed the three processes, I'd spawned using the "kill -9" command. They died. However, this process doesn't seem to die (despite repeated attempts to kill it):
Now, I'll try restarting the machine and then try your experiment and report back.
Thanks,
DTW
---------- Post updated at 03:07 PM ---------- Previous update was at 02:56 PM ----------
Quote:
What happens if you combine the two scripts into one and you use something like this:
Code:
#!/bin/bash
#
# Usage
# From the agent directory:
# ./run-all-agents AgentName1 AgentName2 ...
#
trap killsubs INT
killsubs()
{
echo "CTRL-C was pressed"
jobs -p|xargs kill
echo "Jobs were killed"
exit
}
TAC_AGENT_HOME=`pwd`
LIB=${TAC_AGENT_HOME}/lib
CLASSPATH=.
CLASSPATH=${CLASSPATH}:${TAC_AGENT_HOME}/bin
for i in $( ls ${LIB}/*.jar ); do
CLASSPATH=${CLASSPATH}:$i
done
for i in "$@"
do
java -server -Xmx1024M -Xms512M -cp $CLASSPATH edu.umich.eecs.tac.aa.agentware.Main -config "config/$i.conf" &
done
wait
So, I did what you suggested and called the above script, "test-script1". I ran it like this:
Code:
sh ./test-script1 MyProgram1 MyProgram2 MyProgram3
It started up. Then, when I hit "Ctrl+C" it stopped. Everything stopped nicely. I even did a "ps aux | more" command and looked at the running processes carefully but there was no sign of either of the three programs running. Also, there was no sign of the "java server" running - for the first time. :-) I can test this out and see if the programs are actually functional and report back. Does that sound fair?
DTW
---------- Post updated at 03:30 PM ---------- Previous update was at 03:07 PM ----------
Quote:
I can test this out and see if the programs are actually functional and report back. Does that sound fair?
Hi!
I'm back. I did try to run the programs too and they ran just fine. I tried stopping/starting the programs and they did so every single time. I'm so happy that this is finally working! Thank you very much for all your help, Scrutinizer.
I do have one more question, though. Before I start the programs, I fire up a server using the following script:
Code:
#!/bin/bash
#
# Usage
# sh ./runServer.sh
#
TACAA_HOME=`pwd`
LIB=${TACAA_HOME}/lib
CLASSPATH=.
for i in $( ls ${LIB}/*.jar ); do
CLASSPATH=${CLASSPATH}:$i
done
java -cp $CLASSPATH se.sics.tasim.sim.Main
So far, I've been able to "kill" the server by just hitting Ctrl+C. However, this doesn't always work. Is there a way to nicely kill this process too? That way, we'd have a script to nicely start/stop the server and then another one to nicely start/stop the programs.
My next goal (after the server start/stop script is implemented and tested) is to truly understand what we did so that I actually learn some scripting too. :-)
Hi, glad it works out so well. Perhaps you could try the same thing with the server too, see how that pans out:
Code:
#!/bin/bash
#
# Usage
# sh ./runServer.sh
#
trap killsubs INT
killsubs()
{
echo "CTRL-C was pressed"
jobs -p|xargs kill
echo "Jobs were killed"
exit
}
TACAA_HOME=`pwd`
LIB=${TACAA_HOME}/lib
CLASSPATH=.
for i in $( ls ${LIB}/*.jar ); do
CLASSPATH=${CLASSPATH}:$i
done
java -cp $CLASSPATH se.sics.tasim.sim.Main &
wait
I want to run a C program from my BASH script. Here's some very basic simplified code of my bash script:
#!/bin/bash
echo "Run C program"
./main.c
echo "Ran C program"
Here's my main.c:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv)
{
... (3 Replies)
I have a program which I can run on the command line like below and works fine
/nethome/chrisd/HSeis/TommyCD/TommyCD-1101/bin/raytrac vmod=npt10-z30.vmod srfile=jcdint.sc rcfile=jcdint.rc phases="SP FS" level=twop format="X T" dtau=0.1 mdacc=0.5 mindist=0.1 maxitertp=25 ray=npt10-z30.ry... (0 Replies)
Lets get some stuff out of the way before the question. I am currently running FreeBSD 7.0 on a VirtualBox virtual machine. I do not know much about Unix or FreeBSD, though I do run linux at home. My boss gave me some files that he says are a unix version of the program Dynflow. The Programs... (0 Replies)
hi ,
i need to run a parallel program .
for example;
program1
{
array=" the second program should called here : program 2"
the execution should continue
}
the 2nd program should recieve an array of information as argument and it should... (4 Replies)
Hi there! I tried to search for something like this here but couldn't find anything. I need to run a specific program when linux starts up. I need to run it after the rp-pppoe has started because this prog needs internet connection.
I start the program by entering ./dynix start (its in my home... (4 Replies)
Hi.Iam new to Linux.i got linux 7.0 pro and dont know how to run programs. I want a perl interputer and i know i installed one but how do i run it ??? Also how do i run a C or C++ editor ?and how do i run cron ? (3 Replies)
This is not a question, but rather a simple how-to for
programmers who are new to the UNIX environment.
I too,am new to UNIX.
First I developed a few programs on my box and perfected them
until they were satisfactory for execution.
Problem was however, that once i compiled and all that,... (2 Replies)
How can I make a program run automatically at a certain time of day?
My problem is I need to make a small backup program that will back up a few files every day? (3 Replies)
Just getting into the Unix command line programming and am unable to run any program I write. I am using a Makefile and the source is compiling but when I enter the name of the output file I get back:
bash: lab01exe.out: command not found
I'm sure I am just dooing something simple... (2 Replies)