OILS / spec / builtin-kill.test.sh View on Github | oils.pub

327 lines, 173 significant
1## oils_failures_allowed: 2
2## compare_shells: dash bash mksh
3# note: zsh 5.9 passes more tests
4
5# Tests for builtins having to do with killing a process
6
7#### kill -15 kills the process with SIGTERM
8case $SH in mksh) exit ;; esac # mksh is flaky
9
10sleep 0.1 &
11pid=$!
12kill -15 $pid
13echo kill=$?
14
15wait $pid
16echo wait=$? # 143 is 128 + SIGTERM
17## STDOUT:
18kill=0
19wait=143
20## END
21## BUG mksh STDOUT:
22## END
23
24#### kill -KILL kills the process with SIGKILL
25sleep 0.1 &
26pid=$!
27kill -KILL $pid
28echo kill=$?
29
30wait $pid
31echo wait=$? # 137 is 128 + SIGKILL
32## STDOUT:
33kill=0
34wait=137
35## END
36
37#### kill -n 9 specifies the signal number
38#case $SH in mksh|dash) exit ;; esac
39
40sleep 0.1 &
41pid=$!
42kill -n 9 $pid
43echo kill=$?
44
45wait $pid
46echo wait=$?
47## STDOUT:
48kill=0
49wait=137
50## END
51## N-I dash STDOUT:
52kill=2
53wait=0
54## END
55## N-I mksh STDOUT:
56kill=1
57wait=0
58## END
59
60#### kill -s TERM specifies the signal name
61sleep 0.1 &
62pid=$!
63kill -s TERM $pid
64echo kill=$?
65
66wait $pid
67echo wait=$?
68## STDOUT:
69kill=0
70wait=143
71## END
72## BUG mksh STDOUT:
73kill=0
74wait=0
75## END
76
77#### kill -terM -SigterM isn't case sensitive
78case $SH in mksh|dash|zsh) exit ;; esac
79
80sleep 0.1 &
81pid=$!
82kill -SigterM $pid
83echo kill=$?
84wait $pid
85echo wait=$?
86
87sleep 0.1 &
88pid=$!
89kill -terM $pid
90echo kill=$?
91wait $pid
92echo wait=$?
93
94## STDOUT:
95kill=0
96wait=143
97kill=0
98wait=143
99## N-I dash/mksh/zsh STDOUT:
100## END
101
102#### kill HUP pid gives the correct error
103case $SH in dash) exit ;; esac
104sleep 0.1 &
105builtin kill HUP $pid
106echo $?
107
108## STDOUT:
1091
110## OK osh STDOUT:
1112
112## END
113## N-I dash STDOUT:
114## END
115#### kill -l shows signals
116case $SH in dash) exit ;; esac
117
118# Check if at least the HUP flag is reported. The output format of all shells
119# is different and the available signals may depend on your environment
120
121builtin kill -l | grep HUP > /dev/null
122echo $?
123## STDOUT:
1240
125## N-I dash STDOUT:
126## END
127
128#### kill -L also shows signals
129case $SH in mksh|dash|zsh) exit ;; esac
130
131builtin kill -L | grep HUP > /dev/null
132echo $?
133## STDOUT:
1340
135## N-I mksh/dash/zsh STDOUT:
136## END
137
138#### kill -l 10 TERM translates between names and numbers
139case $SH in mksh|dash) exit ;; esac
140
141builtin kill -l 10 11 12
142echo status=$?
143echo
144
145builtin kill -l SIGUSR1 SIGSEGV USR2
146echo status=$?
147echo
148
149# mixed kind
150builtin kill -l 10 SIGSEGV 12
151echo status=$?
152echo
153
154## STDOUT:
155USR1
156SEGV
157USR2
158status=0
159
16010
16111
16212
163status=0
164
165USR1
16611
167USR2
168status=0
169
170## N-I dash/mksh STDOUT:
171## END
172
173#### kill -L checks for invalid input
174case $SH in mksh|dash) exit ;; esac
175
176builtin kill -L 10 BAD 12
177echo status=$?
178echo
179
180builtin kill -L USR1 9999 USR2
181echo status=$?
182echo
183
184## STDOUT:
185USR1
186USR2
187status=1
188
18910
19012
191status=1
192
193## END
194## N-I dash/mksh STDOUT:
195## END
196
197#### kill -9999 is an invalid signal
198case $SH in dash) exit ;; esac
199sleep 0.1 &
200pid=$!
201kill -9999 $pid > /dev/null
202echo kill=$?
203
204wait $pid
205echo wait=$?
206## STDOUT:
207kill=1
208wait=0
209## N-I dash STDOUT:
210## END
211
212#### kill -15 %% kills current job
213#case $SH in mksh|dash) exit ;; esac
214
215sleep 0.5 &
216pid=$!
217kill -15 %%
218echo kill=$?
219
220wait %%
221echo wait=$?
222
223# no such job
224wait %%
225echo wait=$?
226
227## STDOUT:
228kill=0
229wait=143
230wait=127
231## END
232## OK zsh STDOUT:
233kill=0
234wait=143
235wait=1
236## END
237## N-I dash STDOUT:
238kill=1
239wait=0
240wait=0
241## END
242## BUG mksh STDOUT:
243kill=0
244wait=0
245wait=127
246## END
247
248#### kill -15 %- kills previous job
249#case $SH in mksh|dash) exit ;; esac
250
251sleep 0.1 & # previous job
252sleep 0.2 & # current job
253
254kill -15 %-
255echo kill=$?
256
257wait %-
258echo wait=$?
259
260# what does bash define here as the previous job? May be a bug
261#wait %-
262#echo wait=$?
263## STDOUT:
264kill=0
265wait=143
266## END
267## BUG mksh STDOUT:
268kill=0
269wait=0
270## BUG dash STDOUT:
271kill=1
272wait=0
273## END
274## BUG zsh STDOUT:
275kill=0
276wait=1
277## END
278
279
280#### kill multiple pids at once
281sleep 0.1 &
282pid1=$!
283sleep 0.1 &
284pid2=$!
285sleep 0.1 &
286pid3=$!
287
288kill $pid1 $pid2 $pid3
289echo $?
290## STDOUT:
2910
292## END
293
294#### kill pid and job at once
295sleep 0.1 &
296pid=$!
297sleep 0.1 &
298kill %2 $pid
299echo $?
300## STDOUT:
3010
302## BUG dash STDOUT:
3031
304## END
305
306#### Numeric signal out of range - OSH may send it anyway
307
308sleep 0.1 &
309
310# OSH doesn't validate this, but that could be useful for non-portable signals,
311# which we don't have a name for.
312
313kill -s 9999 %%
314echo kill=$?
315
316wait
317echo wait=$?
318
319## STDOUT:
320kill=1
321wait=0
322## END
323
324## OK dash STDOUT:
325kill=2
326wait=0
327## END