aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2003-10-13 18:25:28 +0000
committerrsc <devnull@localhost>2003-10-13 18:25:28 +0000
commit629864f582b3da6517aee2cac55c26cc832d65b6 (patch)
treeb2ccb6a0066032fab46010ed6444a47a79b22e91
parent771ff2bc058ee7177828e8d2c01fbd9619933784 (diff)
downloadplan9port-629864f582b3da6517aee2cac55c26cc832d65b6.tar.gz
plan9port-629864f582b3da6517aee2cac55c26cc832d65b6.tar.bz2
plan9port-629864f582b3da6517aee2cac55c26cc832d65b6.zip
Some Plan 9 workalikes.
-rwxr-xr-xbin/kill6
-rwxr-xr-xbin/ps72
-rwxr-xr-xbin/psu23
-rwxr-xr-xbin/slay6
4 files changed, 107 insertions, 0 deletions
diff --git a/bin/kill b/bin/kill
new file mode 100755
index 00000000..d0723c50
--- /dev/null
+++ b/bin/kill
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+for i
+do
+ psu | awk '$NF ~ /^('$i')$/ {printf("/bin/kill %d # %s\n", $2, $0);}'
+done
diff --git a/bin/ps b/bin/ps
new file mode 100755
index 00000000..0d6c7ecc
--- /dev/null
+++ b/bin/ps
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+I_WANT_A_BROKEN_PS=yes
+export I_WANT_A_BROKEN_PS
+all=no
+if [ "x$1" = "x-a" ]
+then
+ all=yes
+fi
+export all
+
+cat >/tmp/awk.xxx$$ <<'!'
+BEGIN{
+ state["D"] = "Spinwait";
+ state["I"] = "Idle";
+ state["J"] = "Jail";
+ state["R"] = "Ready";
+ state["S"] = "Sleep";
+ state["T"] = "Stopped";
+ state["Z"] = "Zombie";
+ state["W"] = "Fault";
+ state["X"] = "Moribund";
+}
+
+function statestr(s)
+{
+ t = state[substr(s, 1, 1)];
+ if(t == "")
+ return s;
+ return t;
+}
+
+# rsc 36706 starttime 0:00.17 1076 Is+ -bash (bash)
+{
+ i=1
+ user=$i; i++
+ pid=$i; i++
+ start=$i; i++
+ if(start ~ /^[A-Z][a-z][a-z]$/){
+ start = start "-" $i; i++
+ }
+ cputime=$i; i++
+ mem=$i; i++
+ stat=$i; i++
+ cmd=$i; i++
+ if(ENVIRON["all"] == "yes"){
+ for(; i<=NF; i++)
+ cmd = cmd " " $i;
+ }else{
+ sub(/.*\//, "", cmd);
+ sub(/:$/, "", cmd);
+ sub(/^-/, "", cmd);
+ s = " " cmd;
+ }
+ sub(/\.[0-9][0-9]$/, "", cputime); # drop .hundredths of second
+ if(cputime ~ /..:..:../){ # convert hh:mm:ss into mm:ss
+ split(cputime, a, ":");
+ cputime = sprintf("%d:%02d", a[1]*60+a[2], a[3]);
+ }
+ if(start ~ /..:..:../){ # drop :ss
+ sub(/:..$/, "", start);
+ }
+ printf("%-8s %11d %8s %8s %8dK %-8s %s\n",
+ user, pid, start, cputime, mem, statestr(stat), cmd);
+}
+!
+
+/bin/ps -axww -o 'user,pid,start,time,vsz,stat,command' | sed 1d |
+ awk -f /tmp/awk.xxx$$ | sort +1 -n
+
+rm -f /tmp/awk.xxx$$
+
diff --git a/bin/psu b/bin/psu
new file mode 100755
index 00000000..da6d8d45
--- /dev/null
+++ b/bin/psu
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+flag=''
+if [ "x$1" = "x-a" ]
+then
+ flag=-a
+ shift
+fi
+
+user=`whoami`
+case $# in
+0)
+ user=`whoami`
+ ;;
+1)
+ user=$1
+ ;;
+*)
+ echo 'usage: psu [-a] [user]' 1>&2
+ exit 1
+esac
+
+ps $flag | grep "^$user "
diff --git a/bin/slay b/bin/slay
new file mode 100755
index 00000000..0028e0c8
--- /dev/null
+++ b/bin/slay
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+for i
+do
+ psu | awk '$NF ~ /^('$i')$/ {printf("/bin/kill -9 %d # %s\n", $2, $0);}'
+done