Como fazer com que cópias de executáveis sejam abertas como processos separados?

2

Eu quero ter renomeado cópias de alguns executáveis que usam processos diferentes quando executados.

Sistema: Lubuntu 18.04 Desktop 64 bit.

Por exemplo:

$ sudo cp -a /usr/bin/mate-terminal  /usr/bin/mate-terminal-left
$ sudo cp -a /usr/bin/mate-terminal  /usr/bin/mate-terminal-right

De um lançador, eu executo mate-terminal-left , que abre uma janela de terminal na metade esquerda da tela (devido às minhas configurações para o gerenciador de janelas do OpenBox).

Apenas para referência, eu executo o seguinte nesse terminal:

$ ps -eo pid,command | grep -i 'terminal' | grep -ve 'grep'
19294 /usr/bin/mate-terminal-left

Agora, com o terminal esquerdo ainda aberto, de outro lançador, executo mate-terminal-right , que deve abrir uma janela de terminal na metade direita da tela. No entanto, mate-terminal-right não criou um novo processo, mas, em vez disso, usou o processo mate-terminal-left já ativo, por isso ele também é aberto à esquerda.

$ ps -eo pid,command | grep -i 'terminal' | grep -ve 'grep'
19294 /usr/bin/mate-terminal-left

Quando abro mate-terminal-right primeiro, ele é aberto à direita e, em seguida, mate-terminal-left também é exibido à direita.

Descobri que alguns executáveis, como o Geany, funcionam bem para minha abordagem de renomeação esquerda e direita, mas outros executáveis, como mate-terminal e pcmanfm , usam o mesmo processo para todas as instâncias, mesmo quando iniciados com nomes diferentes.

Minha pergunta é: como posso fazer com que mate-terminal-left e mate-terminal-right sejam abertos como processos separados?

Em resposta aos comentários abaixo que sugerem como fazer um terminal esquerdo e direito, obrigado por suas sugestões. No entanto, não é isso que minha pergunta faz. Eu usei apenas o exemplo para fornecer uma explicação concreta de por que alguém pode querer que o mesmo executável seja executado em vários processos, em vez de várias instâncias em execução no mesmo processo. Eu usei mate-terminal apenas como um exemplo, então não estou procurando outro terminal.

O título desta pergunta é sobre o que estou perguntando: "Como fazer com que cópias de executáveis sejam abertas como processos separados?"

    
por GaryH. 26.11.2018 / 14:07

2 respostas

3

O que você está vendo aqui é bem específico do mate-terminal em si, embora geralmente use alguma infraestrutura compartilhada do GNOME / GTK + que você também pode encontrar em outros aplicativos (você mencionou pcmanfm também.)

Quando você inicia uma nova cópia de mate-terminal , talvez de um binário diferente, ele cria um novo processo para ele. Mas mate-terminal está programado para conectar-se ao D-Bus e tentar procurar uma "fábrica". Nesse caso, ele passará os argumentos para o que iniciar no terminal e fará com que a "fábrica" o controle, depois encerrará o processo. novo processo. (Se não houver fábrica, ela se registrará como a fábrica, é por isso que o primeiro processo iniciado acabará gerenciando todos os terminais.)

A "fábrica" é encontrada por meio do caminho do D-Bus, /org/mate/Terminal/Factory , que é código-morto no binário. (Assim, replicado em outras cópias do binário.)

No caso de mate-terminal especificamente, você pode desabilitar esse comportamento passando a ele um argumento de linha de comando --disable-factory . (Veja a página de manual para mais detalhes.)

Isso é bastante exclusivo de como mate-terminal funciona. Em particular, pcmanfm não faz isso da mesma maneira. Não está claro se pcmanfm suporta uma maneira de iniciar um processo separado ou se a única maneira de funcionar é comunicando-se por meio do D-Bus com uma instância existente. (Você teria que olhar para pcmanfm para ver se funciona).

    
por 27.11.2018 / 08:35
0

Solução alternativa: use uma ferramenta que crie processos separados

Eu tenho um shellscript, que cria três janelas de terminal na área de trabalho do meu computador principal. Com algumas ideias do meu script, fiz a seguinte tentativa, que pode funcionar para você (ou ajudá-lo a fazer o que você precisa),

#!/bin/bash

vdockw=0 #68
hdockw=60

resol=$(xrandr|grep current|cut -d, -f2)
resol=$(<<< "$resol" sed 's/.*current //')
echo $resol
xres=${resol%% *}
yres=${resol##* }
echo $xres $yres
xmid=$(( (xres-vdockw)/2 ))
ymid=$((yres-hdockw))
echo $xmid $ymid

#xterm -title "term v" & pid=$!
sakura --title="term v" & pid=$!
sleep 0.5
wid=$(wmctrl -lp | grep "$pid" | cut "-d " -f1)
sleep 1
echo $pid $wid
wmctrl -i -r $wid -e 1,0,0,$xmid,$ymid

#xterm -title "term h" & pid=$!
sakura --title="term h" & pid=$!
sleep 0.5
wid=$(wmctrl -lp | grep "$pid" | cut "-d " -f1)
sleep 1
echo $pid $wid
wmctrl -i -r $wid -e 1,$((xmid+vdockw)),0,$xmid,$ymid

Eu testei que funciona em dois sistemas 18.04 LTS instalados, Lubuntu (como está) e no Ubuntu padrão (com vdockw=68 ).

O shellscript usa os pacotes de programas sakura wmctrl e talvez xterm , que estão disponíveis no repositório universe e podem ser instalados com

sudo apt update
sudo apt install sakura wmctrl xterm
    
por 27.11.2018 / 07:51

Tags