1

I have a high memory program (ML) that I want to run in a tmux session. However, if the process is OOM killed, the tmux session is also shut down. I partially solved it (using the below run-bg), but it still kills the tmux window it runs in (I suspect because of the PTY, but maybe not). How can I run this program, still have the stdin and stdout be from and to the tmux window, but not have tmux window exit when the program is OOM killed?

run-bg (what I actually use to run the high-memory process):

#!/bin/bash

unit="bg-$(date +%s%N)"

#get the environment args from the executing process
env_args=()

while IFS='=' read -r key val; do
    # Append each --setenv=KEY=VALUE (properly shell-escaped)
    env_args+=( "--setenv=${key}=$(printf '%q' "$val")" )
done < <(env)


# Start the command as a transient user service
systemd-run --user --pty \
    --unit="$unit" \
    --slice=runbg.slice \
    --property=MemoryMax=18G \
    --property=MemoryLimit=14G \
    --property=Delegate=yes \
    --working-directory="$PWD" \
    --expand-environment=yes \
    "${env_args[@]}" \
    "$@"

My tmux config:

set-option -g default-command 'bash -c run-bg-tmux'

run-bg-tmux (this allows for the tmux windows to be separate):

#!/bin/bash

unit="job-$(date +%s%N)"


systemd-run --user --scope \
    --slice=tmuxjobs.slice \
    --unit $unit \
    --property=MemoryMax=32G \
        --property=Delegate=yes \
    bash
17
  • 1
    How can the window stay open if there's no process running there? Commented Nov 20 at 18:43
  • @Barmar Ideally, I would want it to return to its previous state as a terminal (similar to it terminating by pressing CTRL+C or the running process completing normally) Commented Nov 20 at 18:57
  • Is using screen an option? Commented Nov 20 at 19:01
  • 1
    Wouldn't it make sense to protect the process from being killed by OOM, which is very likely? Commented Nov 20 at 19:24
  • 2
    Why not just start tmux with a normal shell and then run your application? Commented Nov 21 at 7:27

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.