|
|
Signals provide a way of passing messages between two threads. Any thread can send a signal to any other thread using the kill command.
Signal handlers are defined in exactly the same way as functions, with names that must begin with sig.
When a thread receives a signal, the function with the same name as the signal is called, interrupting any other action that the thread is carrying out. When the function returns, the previous action continues. If no function has been defined, or inherited from parent threads, the signal is ignored.
For example, the following program shows how a signal can be used to give the user the option of canceling a lengthy compress operation:
function sigstop { stop=true }This command compresses icons that are dropped onto a hypothetical compress icon. Before compressing any of the icons, it puts up a yni dialog box in the background to give the user the option of canceling the command at any time. If the user chooses Yes, the background thread sends the specially defined signal sigstop to its parent thread, $thread_name (2), and this has the effect of setting the variable stop to ``true''. The next time the if $stop ... line is read, the operation will be canceled.{ if yni Cancel? then kill sigstop $threadname(2) fi } &
stop=false for i in $dynamic_args do compress $i if $stop then exit fi done
See also: