Help with Running More than One Program


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help with Running More than One Program
# 8  
Old 01-20-2010
Did you run is with parameters?
Did you press Ctrl-C afterwards?

---------- Post updated at 23:51 ---------- Previous update was at 23:44 ----------

Quote:
Originally Posted by DTriniWay
Scrutinizer,
I also tried:
Sure you can kill all processes with that name:

Code:
kill $( ps aux|awk '/[r]un-any-agent/{print $2}' )

-or-
Code:
kill $(pgrep run-any-agent)

-or if you feel lucky today-
Code:
pkill run-any-agent

The last two commands are not available on every system.
# 9  
Old 01-21-2010
Quote:
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?Smilie 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 ----------

I also tried all of the commands:
[1]
Code:
kill $( ps aux|awk '/[r]un-any-agent/{print $2}' )

[2]
Code:
kill $(pgrep run-any-agent)

[3]
Code:
pkill run-any-agent

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.Smilie

Thanks,

DTW
# 10  
Old 01-21-2010
If you are using script mentioned above & running all the programs in backgorund using & operator, you can use below command :
Quote:
jobs -l
This will show all background process. The second column in the output will show process id. You can use
Quote:
kill -9 <process_id>
to kill as usual.

-Nithin
# 11  
Old 01-21-2010
Quote:
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.

DTW
# 12  
Old 01-21-2010
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

# 13  
Old 01-21-2010
Quote:
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):
Code:
DTW    13986  0.1  1.0 1196768 21528 pts/0   Sl   14:21   0:00 java -server -Xmx1024M -Xms512M -cp ....

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. :-)

Sincerely,

DTW
# 14  
Old 01-21-2010
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

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Running C program in UNIX

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)
Discussion started by: millsy5
3 Replies

2. Shell Programming and Scripting

Running a program using csh

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)
Discussion started by: kristinu
0 Replies

3. UNIX for Dummies Questions & Answers

Running a program (Dynflow)

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)
Discussion started by: poet_will
0 Replies

4. Programming

running a parallel program

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)
Discussion started by: bankpro
4 Replies

5. Programming

running a program for a specified time

how can i run a program for a specified time? i need to print a current time during program execution. (3 Replies)
Discussion started by: prosputko
3 Replies

6. UNIX for Dummies Questions & Answers

Running a program on boot!

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)
Discussion started by: D-Lexy
4 Replies

7. UNIX for Dummies Questions & Answers

Running a program

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)
Discussion started by: perleo
3 Replies

8. Programming

running a c/c++ program in unix

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)
Discussion started by: kray
2 Replies

9. Shell Programming and Scripting

Running a program automatically

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)
Discussion started by: jvadn0
3 Replies

10. Programming

Running a compiled Program

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)
Discussion started by: Krebsbac
2 Replies
Login or Register to Ask a Question