tcl/tk process?

Hi,

I am looking for another solution of how to bring an execution of my tcl/tk programme into background besides doing
> prog input &

I want it to be done from within my program "prog" itself i.e.
> prog input
will do the job and I can use this tty to other thing without having to do
Control-Z & bg.

Thanx.
mafendeeAsked:
Who is Participating?
 
ahoffmannConnect With a Mentor Commented:
wish is ok, 'cause we only use tcl commands which are a subset of wish. I used wish too for my tests ;-)

Are you shure about your "include" and "exclude" statement? is it not the other way around?

For me it works exactly as I posted it here. I don't need catch.
'cause you need to use catch, it sounds like your shell (wish or its parent) is not able to start programs in background. Wired.
0
 
ahoffmannCommented:
if {[string compare $argv {deamon}] == 0} {
  # process goes here
} else {
   exec $argv0 deamon &
   exit
}
exit
0
 
mafendeeAuthor Commented:
I dont really understand how it should work. My first question, what is deamon, are u referring to "input" from

> prog input

0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
mafendeeAuthor Commented:
I dont really understand how it should work. My first question, what is deamon, are u referring to "input" from

> prog input

0
 
ahoffmannCommented:
simply use my suggestion as first lines in your "prog"'s file, that's it.
0
 
mafendeeAuthor Commented:
Basically I wanna know what am I doing. It will be very nice if you could drop a few lines concerning what this code actually does. I was a bit confused with its input parameter.
0
 
ahoffmannCommented:
the code actually checks the first command line parameter, if it is not equal "daemon" the script starts itself in background and exits.
Think that was what you want.
0
 
mafendeeAuthor Commented:
I have tried with your suggestion, but still with some problems...
1. should it be daemon or deamon (in your code)?

If I understood correct, I have done it this way,

if {[string compare $argv {deamon}] == 0} {
       # process goes here   ### A
} else {
       exec $argv0 deamon &  ### B
       exit
}
exit                     ### C

line A: process goes here means all my written code should be placed there, right?

line B: what happen to my command line parameter 'input' from > prog input ?

line C: I am not sure whether I need this 'exit' because it will exit the whole program.
0
 
ahoffmannCommented:
1. the typo dosn't matter 'cause deamon is a string which I typed equal both times (even I meant daemon:-)

line A: right

line B: use changed code

set d [lindex $argv 0]
if {[string compare $d {deamon}] == 0} {
   set argv [lreplace $argv 0 0 {}]
   # process goes here
} else {
   exec $argv0 deamon $argv &
   exit
}
exit

line C: defensive programming (in case of something goes wrong)
0
 
mafendeeAuthor Commented:
I see what you meant. I have changed the code, I think you wanted to delete deamon out from this line.
       set argv [lreplace $argv 0 0 {}]
I works better when I change it to
       set argv [lreplace $argv 0 0]
otherwise it will change argv to "{} input".

But, the problem now is that, it is still doesn't work.

If I exclude line C then, the program exit.
If I include line C, two processes were created and the
process still in foreground, no access to terminal still.

Then I include line D
#######################################################
} else {
        catch {exec $argv0 deamon $argv &}
        catch {exec kill [pid] 2>& /dev/null} ### line D
     exit
}
#######################################################
It seems to solve the problem, i.e. start program in background and able to access the terminal for other use.

BUT (hopefully, this is the last problem) at the terminal I have this "Terminated" message. It doesn't seem good if other user use this program.
###########################
sun100 > prog input
Terminated
###########################
I have tried with the /dev/null upthere but it still doesn't work. Any clue?

One more thing, I am using "wish" as my interpreter
#/opt/tools/sun5/bin/wish -f
0
 
mafendeeAuthor Commented:
You are right, the "include" and "exclude" things should work the other way round. Anyway, it works good right now.
thanx.
0
All Courses

From novice to tech pro — start learning today.