# This testcase is part of GDB, the GNU debugger.
#
# Copyright 2015-2018 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Test the basic operation of the "kill inferiors" and "detach inferiors"
# commands.

if ![can_spawn_for_attach] {
    return 0
}

standard_testfile
set executable $testfile

if [prepare_for_testing "failed to prepare" $executable] {
    return -1
}

runto_main

# Add another forked inferior process.
gdb_test "add-inferior" "Added inferior 2" "add inferior 2"
gdb_test "inferior 2" "Switching to inferior 2.*"
gdb_test "file $binfile" "Reading symbols from .*" "load binary"
gdb_test "start" "Temporary breakpoint.*Starting program.*"

# Add an attached inferior process.
set test_spawn_id [spawn_wait_for_attach $binfile]
set test_pid [spawn_id_get_pid $test_spawn_id]
gdb_test "add-inferior" "Added inferior 3" "add inferior 3"
gdb_test "inferior 3" "Switching to inferior 3.*"
gdb_test "attach $test_pid" "Attaching to process.*" "attach to pid"

# Kill the first two inferiors, and detach the third.
gdb_test_no_output "kill inferiors 1 2"
gdb_test "inferior 1" "Switching to inferior 1.*"
gdb_test "kill" "The program is not being run.*"
gdb_test "detach inferiors 3" "Detaching from program.*process $test_pid.*"

# No inferiors should be running anymore.
gdb_test "kill inferiors 1 2 3" \
	 "ID 1 is not running.*ID 2 is not running.*ID 3 is not running.*"
gdb_test "detach inferiors 1 2 3" \
	 "ID 1 is not running.*ID 2 is not running.*ID 3 is not running.*"

gdb_test "kill inferiors 10" \
	 "ID 10 not known.*"

kill_wait_spawned_process $test_spawn_id
