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.
