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

354 lines, 184 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 -9999 is an invalid signal
225case $SH in dash) exit ;; esac
226sleep 0.1 &
227pid=$!
228kill -9999 $pid > /dev/null
229echo kill=$?
230
231wait $pid
232echo wait=$?
233## STDOUT:
234kill=1
235wait=0
236## N-I dash STDOUT:
237## END
238
239#### kill -15 %% kills current job
240#case $SH in mksh|dash) exit ;; esac
241
242sleep 0.5 &
243pid=$!
244kill -15 %%
245echo kill=$?
246
247wait %%
248echo wait=$?
249
250# no such job
251wait %%
252echo wait=$?
253
254## STDOUT:
255kill=0
256wait=143
257wait=127
258## END
259## OK zsh STDOUT:
260kill=0
261wait=143
262wait=1
263## END
264## N-I dash STDOUT:
265kill=1
266wait=0
267wait=0
268## END
269## BUG mksh STDOUT:
270kill=0
271wait=0
272wait=127
273## END
274
275#### kill -15 %- kills previous job
276#case $SH in mksh|dash) exit ;; esac
277
278sleep 0.1 & # previous job
279sleep 0.2 & # current job
280
281kill -15 %-
282echo kill=$?
283
284wait %-
285echo wait=$?
286
287# what does bash define here as the previous job? May be a bug
288#wait %-
289#echo wait=$?
290## STDOUT:
291kill=0
292wait=143
293## END
294## BUG mksh STDOUT:
295kill=0
296wait=0
297## BUG dash STDOUT:
298kill=1
299wait=0
300## END
301## BUG zsh STDOUT:
302kill=0
303wait=1
304## END
305
306
307#### kill multiple pids at once
308sleep 0.1 &
309pid1=$!
310sleep 0.1 &
311pid2=$!
312sleep 0.1 &
313pid3=$!
314
315kill $pid1 $pid2 $pid3
316echo $?
317## STDOUT:
3180
319## END
320
321#### kill pid and job at once
322sleep 0.1 &
323pid=$!
324sleep 0.1 &
325kill %2 $pid
326echo $?
327## STDOUT:
3280
329## BUG dash STDOUT:
3301
331## END
332
333#### Numeric signal out of range - OSH may send it anyway
334
335sleep 0.1 &
336
337# OSH doesn't validate this, but that could be useful for non-portable signals,
338# which we don't have a name for.
339
340kill -s 9999 %%
341echo kill=$?
342
343wait
344echo wait=$?
345
346## STDOUT:
347kill=1
348wait=0
349## END
350
351## OK dash STDOUT:
352kill=2
353wait=0
354## END