-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathkill.sh
100 lines (74 loc) · 1.93 KB
/
kill.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Kill autocomplete
fn nash_complete_killopt(query, line, pos) {
var queryOpt = ()
var choice = ""
if $query != "" {
queryOpt = ("-q" "^"+$query)
}
choice <= (
echo "-1 HUP\n-2 INT\n-3 QUIT\n-4 ILL\n-5 TRAP\n-6 ABRT\n-6 IOT\n-7 BUS\n-8 FPE\n-9 KILL\n-10 USR1\n-11 SEGV\n-12 USR2\n-13 PIPE\n-14 ALRM\n-15 TERM\n-16 STKFLT\n-17 CHLD\n-17 CLD\n-18 CONT\n-19 STOP\n-20 TSTP\n-21 TTIN\n-22 TTOU\n-23 URG\n-24 XCPU\n-25 XFSZ\n-26 VTALRM\n-27 PROF\n-28 WINCH\n-29 IO\n-29 POLL\n-30 PWR\n-31 UNUSED\n-31 SYS\n-34 RTMIN\n-64 RTMAX" |
-fzf --reverse
--header
"Select signal: " $queryOpt
)
if $status != "0" {
return ()
}
choice <= trim($choice)
var sig <= echo $choice | cut -d " " -f1 | tr -d "\n"
if $query != "" {
sig <= diffword($sig, $query)
}
return ($sig+" " "0")
}
fn nash_complete_kill(parts, line, pos) {
var partsz <= len($parts)
var ret = ""
var last = ""
var choice = ""
if $partsz == "0" {
return $ret
}
if $partsz == "1" {
ret <= nash_complete_killopt("", $line, $pos)
return $ret
}
last <= -expr $partsz - 1
last <= trim($last)
var lastpart = $parts[$last]
var query = ()
var querylen = "0"
var _, status <= echo $lastpart | grep "^-$" >[1=]
if $status == "0" {
ret <= nash_complete_killopt($lastpart, $line, $pos)
return $ret
}
echo $lastpart | -grep "^-" >[1=]
if $status != "0" {
echo $line | -grep " $" >[1=]
if $status != "0" {
query = ("-q" "^"+$lastpart)
querylen = "2"
}
}
var pidsHeader = "select processes: (mark multiples with TAB)"
# autocomplete pids
choice, status <= (
ps -eo "pid,ppid,user,pcpu,pmem,args"
--sort "%mem" |
tr -s " " |
sed $sedArgs "s/^ //g" |
-fzf --header $pidsHeader
--header-lines=1
-m
--reverse $query
)
if $status != "0" {
return ()
}
choice <= echo $choice | cut -d " " -f1 | tr "\n" " " | tr -s " "
if $querylen == "2" {
choice <= diffword($choice, $lastpart)
}
return ($choice "0")
}