type=page
status=published
title=stop-instance
next=stop-local-instance.html
prev=stop-domain.html
~~~~~~

= stop-instance

[[stop-instance-1]][[GSRFM00241]][[stop-instance]]

== stop-instance

Stops a running {productName} instance

[[sthref2173]]

=== Synopsis

[source]
----
asadmin [asadmin-options] stop-instance [--help]
[--force={false|true}] [--kill={false|true}]
instance-name
----

[[sthref2174]]

=== Description

The `stop-instance` subcommand stops a running {productName} instance.

The subcommand can stop any {productName} instance, regardless of
how the instance was created. For example, this subcommand can stop an
instance that was created by using the
link:create-local-instance.html#create-local-instance-1[`create-local-instance`(1)] subcommand.

This command is supported in remote mode only.

[[sthref2175]]

=== Options

asadmin-options::
  Options for the `asadmin` utility. For information about these
  options, see the link:asadmin.html#asadmin-1m[`asadmin`(1M)] help page.
`--help`::
`-?`::
  Displays the help text for the subcommand.
`--force`::
  Specifies whether the instance is forcibly stopped immediately. +
  Possible values are as follows:

  `true`;;
    The instance is forcibly stopped immediately (default).
  `false`;;
    The subcommand waits until all threads that are associated with the
    instance are exited before stopping the instance.

`--kill`::
  Specifies whether the instance is killed by using functionality of the
  operating system to terminate the instance process. +
  Possible values are as follows:

  `false`;;
    The instance is not killed. The subcommand uses functionality of the
    Java platform to terminate the instance process (default).
  `true`;;
    The instance is killed. The subcommand uses functionality of the
    operating system to terminate the instance process.

[[sthref2176]]

=== Operands

instance-name::
  This is the name of the {productName} instance to stop.

[[sthref2177]]

=== Examples

This example stops the {productName} instance `yml-i-sj01`.

[[GSRFM767]][[sthref2178]]

==== Example 1   Stopping a {productName} Instance

[source]
----
asadmin> stop-instance yml-i-sj01
The instance, yml-i-sj01, was stopped.

Command stop-instance executed successfully.
----

[[sthref2179]]

=== Exit Status

0::
  command executed successfully
1::
  error in executing the command

[[sthref2180]]

=== See Also

link:asadmin.html#asadmin-1m[`asadmin`(1M)]

link:create-instance.html#create-instance-1[`create-instance`(1)],
link:create-local-instance.html#create-local-instance-1[`create-local-instance`(1)],
link:delete-instance.html#delete-instance-1[`delete-instance`(1)],
link:delete-local-instance.html#delete-local-instance-1[`delete-local-instance`(1)],
link:start-domain.html#start-domain-1[`start-domain`(1)],
link:start-instance.html#start-instance-1[`start-instance`(1)],
link:start-local-instance.html#start-local-instance-1[`start-local-instance`(1)],
link:stop-domain.html#stop-domain-1[`stop-domain`(1)],
link:stop-local-instance.html#stop-local-instance-1[`stop-local-instance`(1)]


