---
sidebar_position: 240
---

# AQUA_X_SYS_EXEC

aqua >= v2.5.0

[#710](https://github.com/aquaproj/aqua/issues/710) [#729](https://github.com/aquaproj/aqua/issues/729) [#1597](https://github.com/aquaproj/aqua/issues/1597) [#1925](https://github.com/aquaproj/aqua/issues/1925)

:::caution
This feature doesn't work on Windows because Windows doesn't support `execve(2)`.
:::

When a command `x` is executed via aqua, the command is executed as the following.

1. $AQUA_ROOT_DIR/bin/x: symbolic link to aqua-proxy
1. aqua-proxy executes the command `aqua exec -- x`
1. aqua executes `x`

So the command `x` is executed via `aqua-proxy` and `aqua`.
Until aqua v2.5.0, `aqua-proxy` and `aqua` executed commands as subprocess. You can confirm it by checking the process tree by `pstree` command.

e.g.

```console
$ nvim # nvim is managed by aqua
$ pstree -s nvim
```

```
     \-+= 00719 shunsukesuzuki -zsh
       \-+= 09955 shunsukesuzuki nvim # aqua-proxy
         \-+- 09956 shunsukesuzuki aqua exec -- nvim
           \--- 09957 shunsukesuzuki /Users/shunsukesuzuki/.local/share/aquaproj-aqua/pkgs/github_release/github.com/neovim/neovim/v0.7.0/nvim-macos.tar.gz/nvim-osx64/bin/nvim
```

```
aqua-proxy -> aqua -> x
```

Sometimes this behaviour caused trouble. [#710](https://github.com/aquaproj/aqua/issues/710) [#1597](https://github.com/aquaproj/aqua/issues/1597)

From aqua v2.5.0, `aqua-proxy` and `aqua` execute commands by [execve(2)](https://pkg.go.dev/golang.org/x/sys/unix#Exec) in Linux and macOS by default.

So extra subprocess isn't raised.

```
     \-+= 82315 shunsukesuzuki -zsh
       \-+= 82630 shunsukesuzuki nvim
```

If you feel aqua becomes unstable due to this feature, you can disable this feature by the environment variable `AQUA_X_SYS_EXEC`.

```sh
export AQUA_X_SYS_EXEC=false
```
