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

366 lines, 188 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 -l with exit code
198kill -l 134 # 128 + 6 (ABRT)
199## STDOUT:
200ABRT
201## END
202
203#### kill -l with 128 is invalid
204kill -l 128
205if [ $? -ne 0 ]; then
206 echo "invalid"
207fi
208## STDOUT:
209invalid
210## N-I mksh STDOUT:
211128
212## END
213
214#### kill -l 0 returns EXIT
215kill -l 0
216## STDOUT:
217EXIT
218## N-I dash status: 2
219## N-I dash STDOUT:
220## N-I mksh STDOUT:
2210
222## END
223
224#### kill -l 0 INT lists both signals
225kill -l 0 INT
226## STDOUT:
227EXIT
2282
229## N-I dash status: 2
230## N-I dash STDOUT:
231## N-I mksh status: 1
232## N-I mksh STDOUT:
2330
234## END
235
236#### kill -9999 is an invalid signal
237case $SH in dash) exit ;; esac
238sleep 0.1 &
239pid=$!
240kill -9999 $pid > /dev/null
241echo kill=$?
242
243wait $pid
244echo wait=$?
245## STDOUT:
246kill=1
247wait=0
248## N-I dash STDOUT:
249## END
250
251#### kill -15 %% kills current job
252#case $SH in mksh|dash) exit ;; esac
253
254sleep 0.5 &
255pid=$!
256kill -15 %%
257echo kill=$?
258
259wait %%
260echo wait=$?
261
262# no such job
263wait %%
264echo wait=$?
265
266## STDOUT:
267kill=0
268wait=143
269wait=127
270## END
271## OK zsh STDOUT:
272kill=0
273wait=143
274wait=1
275## END
276## N-I dash STDOUT:
277kill=1
278wait=0
279wait=0
280## END
281## BUG mksh STDOUT:
282kill=0
283wait=0
284wait=127
285## END
286
287#### kill -15 %- kills previous job
288#case $SH in mksh|dash) exit ;; esac
289
290sleep 0.1 & # previous job
291sleep 0.2 & # current job
292
293kill -15 %-
294echo kill=$?
295
296wait %-
297echo wait=$?
298
299# what does bash define here as the previous job? May be a bug
300#wait %-
301#echo wait=$?
302## STDOUT:
303kill=0
304wait=143
305## END
306## BUG mksh STDOUT:
307kill=0
308wait=0
309## BUG dash STDOUT:
310kill=1
311wait=0
312## END
313## BUG zsh STDOUT:
314kill=0
315wait=1
316## END
317
318
319#### kill multiple pids at once
320sleep 0.1 &
321pid1=$!
322sleep 0.1 &
323pid2=$!
324sleep 0.1 &
325pid3=$!
326
327kill $pid1 $pid2 $pid3
328echo $?
329## STDOUT:
3300
331## END
332
333#### kill pid and job at once
334sleep 0.1 &
335pid=$!
336sleep 0.1 &
337kill %2 $pid
338echo $?
339## STDOUT:
3400
341## BUG dash STDOUT:
3421
343## END
344
345#### Numeric signal out of range - OSH may send it anyway
346
347sleep 0.1 &
348
349# OSH doesn't validate this, but that could be useful for non-portable signals,
350# which we don't have a name for.
351
352kill -s 9999 %%
353echo kill=$?
354
355wait
356echo wait=$?
357
358## STDOUT:
359kill=1
360wait=0
361## END
362
363## OK dash STDOUT:
364kill=2
365wait=0
366## END