Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

tcl/tk process?

Posted on 2002-05-15
11
Medium Priority
?
310 Views
Last Modified: 2013-11-22
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.
0
Comment
Question by:mafendee
  • 6
  • 5
11 Comments
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7014730
if {[string compare $argv {deamon}] == 0} {
  # process goes here
} else {
   exec $argv0 deamon &
   exit
}
exit
0
 

Author Comment

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

> prog input

0
 

Author Comment

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

> prog input

0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 51

Expert Comment

by:ahoffmann
ID: 7022304
simply use my suggestion as first lines in your "prog"'s file, that's it.
0
 

Author Comment

by:mafendee
ID: 7023389
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
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7025451
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
 

Author Comment

by:mafendee
ID: 7029253
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
 
LVL 51

Expert Comment

by:ahoffmann
ID: 7030588
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
 

Author Comment

by:mafendee
ID: 7031933
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
 
LVL 51

Accepted Solution

by:
ahoffmann earned 200 total points
ID: 7032864
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
 

Author Comment

by:mafendee
ID: 7044084
You are right, the "include" and "exclude" things should work the other way round. Anyway, it works good right now.
thanx.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In threads here at EE, each comment has a unique Identifier (ID). It is easy to get the full path for an ID via the right-click context menu. However, we often want to post a short link within a thread rather than the full link. This article shows a…
The SignAloud Glove is capable of translating American Sign Language signs into text and audio.
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.
Suggested Courses

877 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question