Aan allen die zijn of zullen zijn, onze groet.


I don't know if this is the correct place for "user"-discussion, but I'm
looking for some information about perl threads.

I've been looking into perlthrtut and the other manuals for this, but I
don't see to find the solution.

If it is off-topic, please point me to a more correct newsgroup or forum.




My question is this:

Is there a way to get 100 % certainty if a thread is running.


What I want to do is this:

I have a program that makes a number (actually eigth) of ssh-sessions to
a number of servers using the net::telnet module. On the servers, they
read the log-files to get some information using a "tail -f".


Now, I've got a thread (called "sshmaster") in my main program which
starts up the 8 ssh-session (called "sshsession"); each as a seperate
thread.
These sub-thread communicate back to "sshmaster" for control-messages
(e.g. connection established, connection failed, connection interrupted)
 using a queue.



So far, so good. And it does seams to work pretty-much OK, ... as long
as the ssh-sessions behaviour as they are supposted to do.


But, I want to be sure that the sub-threads do keep on working OK, and
-when a subtreads dies for whatever reason- that "sshmaster" is able to
check this.

I see different possibilities:
1/ sent a control-message from the sub-thread to sshmaster over the
message-queue. However, this will not work if the subthread dies for an
unknown reason and it might not be able to sent a message to sshmaster.

2/ lock a variable (which will automatically unlock when the thread
dies), but sshmaster is not able to check if a variable is still locked
without blocking.

3/ As "sshmaster" has a list of all its subthreads, ask a system if a
thread is still alive. But HOW????


The only way I see is by locking a file using the "flock" mechanism but
that'a a bit "overkill" if you ask me.


Anybody any other ideas?






B.T.W. Appart from the "check if thread still runs" and "check if a
variable is locked without locking it yourself and without blocking",
there are two other things I would like to use, but for which I have not
found a solution:

- be able to read from multiple queues at the same time.
- or, as an option, add a "time-out" option to the "dequeue" function.
When you have a thread that runs by itself doing some action and
communicating with other threads over queues, you usually have multiple
queues active (e.g. one for the "data" and another one for
"control-messages").

Currently, you have to do this using "dequeue_nb" and "sleep".


- Sent a "kill" to a thread. (e.g.where the "sshmaster" can kill of a
child sub-thread when it sees it has not received any information from
that sub-thread for -say- 60 seconds.


- set up a queue as a "pipe" between just two processes; and where -if
one of the sides dies- the process on the other side gets notifed of
this fact.



Just my 2 eurocent.



Cheerio! Kr. Bonne.

Reply via email to