summaryrefslogtreecommitdiff
path: root/web/src/cgi.tcl-1.10/example/kill.cgi
diff options
context:
space:
mode:
authorEduardo Chappa <echappa@gmx.com>2013-02-03 00:59:38 -0700
committerEduardo Chappa <echappa@gmx.com>2013-02-03 00:59:38 -0700
commit094ca96844842928810f14844413109fc6cdd890 (patch)
treee60efbb980f38ba9308ccb4fb2b77b87bbc115f3 /web/src/cgi.tcl-1.10/example/kill.cgi
downloadalpine-094ca96844842928810f14844413109fc6cdd890.tar.xz
Initial Alpine Version
Diffstat (limited to 'web/src/cgi.tcl-1.10/example/kill.cgi')
-rwxr-xr-xweb/src/cgi.tcl-1.10/example/kill.cgi69
1 files changed, 69 insertions, 0 deletions
diff --git a/web/src/cgi.tcl-1.10/example/kill.cgi b/web/src/cgi.tcl-1.10/example/kill.cgi
new file mode 100755
index 00000000..f3ffe6a3
--- /dev/null
+++ b/web/src/cgi.tcl-1.10/example/kill.cgi
@@ -0,0 +1,69 @@
+#!/depot/path/tclsh
+
+package require cgi
+
+cgi_eval {
+ source example.tcl
+
+ cgi_input
+
+ cgi_title "Kill runaway CGI processes"
+
+ cgi_body {
+ if {0==[catch {cgi_import PidList}]} {
+ catch {cgi_import Refresh;set PidList {}}
+ cgi_import Sig
+ h4 "If this were not a demo, the following commands would be executed:"
+ foreach pid $PidList {
+ # to undemoize this and allow processes to be killed,
+ # change h5 to exec and remove the quotes
+ if {[catch {h5 "kill -$Sig $pid"} msg]} {
+ h4 "$msg"
+ }
+ }
+ }
+
+ cgi_form kill {
+ set ps /bin/ps
+ if {[file exists /usr/ucb/ps]} {
+ set ps /usr/ucb/ps
+ }
+
+ set f [open "|$ps -auxww" r]
+ table border=2 {
+ table_row {
+ table_data {puts kill}
+ table_data {cgi_preformatted {puts [gets $f]}}
+ }
+ while {-1 != [gets $f buf]} {
+ if {[regexp "$argv0" $buf]} continue
+ if {![regexp "^http" $buf]} continue
+ table_row {
+ table_data {
+ scan $buf "%*s %d" pid
+ cgi_checkbox PidList=$pid
+ }
+ table_data {
+ cgi_preformatted {puts $buf}
+ }
+ }
+ }
+
+ }
+
+ submit_button "=Send signal to selected processes"
+ submit_button "Refresh=Refresh listing"
+ reset_button
+
+ br; radio_button "Sig=TERM" checked; puts "SIGTERM: terminate gracefully"
+ br; radio_button "Sig=KILL"; puts "SIGKILL: terminate ungracefully"
+ br; radio_button "Sig=STOP"; puts "SIGSTOP: suspend"
+ br; radio_button "Sig=CONT"; puts "SIGCONT: continue"
+
+ p "SIGSTOP and SIGCONT are particularly useful if the
+ processes aren't yours and the owner isn't around to ask.
+ Suspend them and let the owner decide later whether to
+ continue or kill them."
+ }
+ }
+}