PyrexKidd has asked for the wisdom of the Perl Monks concerning the following question:
Ok, let me try to rephrase.
What is the best way to affect program behavior, using keyboard keys/commands/shortcuts/signals, without waiting for user input?
I would like to send keyboard interrupts to a running Perl process to cause it to perform certain functions midstream. For instance, I would like to press ^C and have it dump some information to the screen, I would like to press ^Z and have it dump some information to a file, etc.
To my thinking, it would be easiest to use signals to illicit this behavior from my program especially because it runs in the foreground of a terminal; I am not sure how to send these signals to the program using keyboard controls.
I could use the Linux command 'kill' (and the respective signal number) to send the signals to the process, or I could write a second program and use the Perl built-in 'kill' to send these signals, but this requires a second terminal (which may or may not be feasible) and requires knowing the PID of the Perl process (which is leas than ideal). Both of these solutions are less than ideal.
my problem is I can only send the interrupt signal via keyboard keys.
I assure you this is not what I meant... What I was trying to say is: I would like to send the signals via keyboard keys (or combination of keys), my problem is I don't know how.
{What you didn't get that from that sentence?!? I can imagine why... Can't you read minds?}
Perhaps signals aren't the best choice; I am open to other suggestions, but have no idea where to start other than completely rewriting my program using the POE framework...
Thanks for your understanding; I work for a help desk, so I totally understand how painful it can be when someone requests help and provides partial (or less than partial) information.
Hello Monks,
I am not sure exactly where this fits in the computer science universe, so I'm hoping you can help me.
Essentially, I would like to be able to send signals to a running Perl process to cause it to do things mid run.
This is not an event driven script and does not lend itself to be easily rewritten in POE. (My first thought.)
So my next thought is to use signals to affect program behavior; I only need a couple of events.
I understand how to trap signals in Perl, my trouble is with sending the signals. Ideally I would like to be able to press ^C and do something, then ^Z and do something else, my problem is I can only send the interrupt signal via keyboard keys. (as a last choice I can use `kill -* $PID` to send the required signals, but this seems like a poor choice.)
Maybe I need to rethink my whole approach. Any thoughts, suggestions, ideas, comments, criticisms, or jokes?
An overtly simplified version of what I am talking about follows:
you get the idea.#!/usr/bin/perl use strict; use warnings; $SIG{'HUP'} = \&hangup; $SIG{'INT'} = \&interrupt; $SIG{'KILL'} = \&kill; #create necessary vars. while (1){ #do main processing here } sub hangup { my $sig = shift; print "Got SIG$sig exiting"; exit 0; } sub interrupt { #do stuff here } sub kill { print "HaHa, can't kill me!\n"; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Sending Signals / Keyboard Interrupts
by ikegami (Patriarch) on Jul 18, 2011 at 22:22 UTC | |
by PyrexKidd (Monk) on Jul 19, 2011 at 00:32 UTC | |
by ikegami (Patriarch) on Jul 21, 2011 at 19:39 UTC | |
|
Re: Sending Signals / Keyboard Interrupts
by cdarke (Prior) on Jul 19, 2011 at 10:32 UTC | |
|
Re: Sending Signals / Keyboard Interrupts
by SuicideJunkie (Vicar) on Jul 19, 2011 at 13:57 UTC | |
|
Re: Sending Signals / Keyboard Interrupts
by Marshall (Canon) on Jul 19, 2011 at 20:27 UTC | |
|
Re: Sending Signals / Keyboard Interrupts
by PyrexKidd (Monk) on Jul 20, 2011 at 23:20 UTC |