### Apache Airflow version

main (development)

### What happened

asset compilation background thread is not killed when running `stop_airflow`  or `breeze stop`.

Webpack process takes a lot of memory, each `start-airflow` starts 4-5 of them.

After a few breeze start, we end up with 15+ webpack background processes that takes more than 20G RAM

### What you think should happen instead

`run_compile_www_assets` should stop when running `stop_airflow` from tmux. It looks like it spawn a `compile-www-assets-dev` pre-commit in a subprocess, that doesn't get killed when stopping breeze

### How to reproduce

```
breeze start-airflow --backend postgres --python 3.8 --dev-mode
# Wait for tmux session to start
breeze_stop

breeze start-airflow --backend postgres --python 3.8 --dev-mode
# Wait for tmux session to start
breeze_stop

# do a couple more if needed
```

Open tmux and monitor your memory, and specifically webpack processes.

### Operating System

Ubuntu 20.04.6 LTS

### Versions of Apache Airflow Providers

_No response_

### Deployment

Other

### Deployment details

_No response_

### Anything else

_No response_

### Are you willing to submit PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

WWW_ASSET_COMPILE_LOCK.unlink()
        except FileNotFoundError:
            pass
        try:
            with SoftFileLock(WWW_ASSET_COMPILE_LOCK, timeout=5):
                with open(WWW_ASSET_OUT_FILE, "w") as output_file:
                    result = run_command(
                        command_to_execute,
                        check=False,
                        no_output_dump_on_exception=True,
                        text=True,
                        env=env,
                        stderr=subprocess.STDOUT,
                        stdout=output_file,
                    )
                if result.returncode == 0:
                    try:
                        WWW_ASSET_OUT_FILE.unlink()
                    except FileNotFoundError:
                        pass
                return result
        except Timeout:
            get_console().print("[error]Another asset compilation is running. Exiting[/]\n")
            get_console().print("[warning]If you are sure there is no other compilation,[/]")
            get_console().print("[warning]Remove the lock file and re-run compilation:[/]")
            get_console().print(WWW_ASSET_COMPILE_LOCK)
            get_console().print()
            sys.exit(1)
def run_compile_www_assets(
    dev: bool,