2017-01-25 07:15:38 +08:00
|
|
|
# vim: set filetype=expect:
|
|
|
|
#
|
|
|
|
# Test handling of the `exit` command.
|
|
|
|
set pid [spawn $fish]
|
|
|
|
expect_prompt
|
|
|
|
|
|
|
|
# Verify that if we attempt to exit with a job in the background we get warned
|
|
|
|
# about that job and are told to type `exit` a second time.
|
|
|
|
send "sleep 111 &\r"
|
|
|
|
expect_prompt
|
|
|
|
send "exit\r"
|
2017-08-09 17:56:04 +08:00
|
|
|
expect -re "There are still jobs active:\r
|
|
|
|
\r
|
|
|
|
PID Command\r
|
|
|
|
*\\d+ sleep 111 &\r
|
|
|
|
\r
|
2017-10-31 20:09:45 +08:00
|
|
|
A second attempt to exit will terminate them.\r
|
|
|
|
Use 'disown PID' to remove jobs from the list without terminating them.\r"
|
2017-01-25 07:15:38 +08:00
|
|
|
expect_prompt
|
|
|
|
|
|
|
|
# Running anything other than `exit` should result in the same warning with
|
|
|
|
# the shell still running.
|
|
|
|
send "sleep 113 &\r"
|
|
|
|
expect_prompt
|
|
|
|
send "exit\r"
|
2017-08-09 17:56:04 +08:00
|
|
|
expect -re "There are still jobs active:\r
|
|
|
|
\r
|
|
|
|
PID Command\r
|
|
|
|
*\\d+ sleep 113 &\r
|
|
|
|
*\\d+ sleep 111 &\r
|
|
|
|
\r
|
2017-10-31 20:09:45 +08:00
|
|
|
A second attempt to exit will terminate them.\r
|
|
|
|
Use 'disown PID' to remove jobs from the list without terminating them.\r"
|
2017-01-25 07:15:38 +08:00
|
|
|
expect_prompt
|
|
|
|
|
|
|
|
# Verify that asking to exit a second time does so.
|
|
|
|
send "exit\r"
|
|
|
|
catch {expect default exp_continue} output
|
|
|
|
wait
|
|
|
|
|
|
|
|
# Verify all child processes have been killed. We don't use `-p $pid` because
|
|
|
|
# if the shell has a bug the child processes might have been reparented to pid
|
|
|
|
# 1 rather than killed.
|
|
|
|
set status [catch {exec pgrep -l -f "sleep 11"} output]
|
|
|
|
if {$status == 0} {
|
|
|
|
puts stderr "Commands spawned by the shell still running after `exit`"
|
|
|
|
puts stderr $output
|
|
|
|
}
|