ps - hierarquia de processos

Quando comecei a usar o compterm um problema logo apareceu, às vezes eu esquecia que o compterm estava carregado. Daí a criei uma pequena função para detectar se eu estava em uma sessão carregada pelo compterm ou se era apenas uma sessão normal do zsh.

function is_parent_compterm {
    local pid=$$
    local parent_pid

    while [ "$pid" -ne 1 ]; do
        parent_pid=$(ps -p $pid -o ppid=)
        parent_pid=${parent_pid//[[:blank:]]/}  # Remove espaços

        # Verifica se o nome do comando do processo pai é 'compterm'
        if ps -p $parent_pid -o comm= | grep -q "^compterm$"; then
            return 0  # Retorna true se encontrar 'compterm'
        fi

        pid=$parent_pid
    done

    return 1  # Retorna false se 'compterm' não for encontrado
}

Essa função verifica todos os processos parents do processo atual e se o nome de algum deles for compterm retorna true. Com isso consigo personalizar o prompt e assim sei se o compterm está carregado ou não.

if is_parent_compterm; then
    PS1="%F{yellow}compterm%f%F{green}>%f "
fi

A versão mais nova do compterm não precisa de uma função tão complexa, ao ser carregado ele cria uma variável de ambiente com o PID do processo, então é fácil descobrir se é uma sessão do shell carregada pelo compterm ou não.

if [[ -v COMPTERM ]]; then
    PS1="%F{yellow}compterm%f%F{green}>%f "
fi

A mesma ideia pode ser usada em outros scripts para saber, por exemplo, se está sendo executado sob o tmux ou não.


Cesar Gimenes

Última modificação