# 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" expect -re "There are still jobs active:\r \r PID Command\r *\\d+ sleep 111 &\r \r A second attempt to exit will terminate them.\r Use 'disown PID' to remove jobs from the list without terminating them.\r" 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" expect -re "There are still jobs active:\r \r PID Command\r *\\d+ sleep 113 &\r *\\d+ sleep 111 &\r \r A second attempt to exit will terminate them.\r Use 'disown PID' to remove jobs from the list without terminating them.\r" 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 $fish_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 }