실행 파일의 복사본을 별도의 프로세스로 열려면 어떻게 해야 합니까?

실행 파일의 복사본을 별도의 프로세스로 열려면 어떻게 해야 합니까?

실행할 때 다른 프로세스를 사용하기 위해 일부 실행 파일 복사본의 이름을 바꾸고 싶습니다.

시스템: Lubuntu 18.04 데스크톱 64비트.

예를 들어:

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

실행기에서 를 실행하면 mate-terminal-left화면 왼쪽에 터미널 창이 열립니다(OpenBox 창 관리자에 대한 구성 설정으로 인해).

참고로 해당 터미널에서 다음 명령을 실행합니다.

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

이제 왼쪽 터미널이 열려 있는 상태에서 다른 실행기에서 실행하면 mate-terminal-right화면 오른쪽 절반에 터미널 창이 열립니다. 하지만 mate-terminal-right새로운 프로세스가 생성되지 않고 이미 활성화된 mate-terminal-left프로세스를 사용하기 때문에 왼쪽에도 열립니다.

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

처음 열면 mate-terminal-right오른쪽이 열리고 mate-terminal-left오른쪽에서도 끝납니다.

mate-terminal일부 실행 파일(예: Geany)은 왼쪽-오른쪽 이름 변경 방법에 적합하지만 다른 실행 파일(예: 및 )은 pcmanfm다른 이름으로 시작하더라도 모든 인스턴스에 대해 동일한 프로세스를 사용한다는 것을 발견했습니다 .

내 질문은: 각각을 별도의 프로세스로 활성화 mate-terminal-left하고 열 수 있는 방법은 무엇입니까?mate-terminal-right

왼쪽 및 오른쪽 터미널을 만드는 방법을 제안하는 아래 의견에 대한 귀하의 제안에 감사드립니다. 그러나 그것은 내 질문이 아닙니다. 나는 누군가가 동일한 프로세스의 여러 인스턴스를 실행하는 대신 여러 프로세스에서 동일한 실행 파일을 실행하려는 이유를 구체적으로 설명하기 위해 이 예제를 사용하고 있습니다. 나는 mate-terminal이것을 예시로 사용하고 있으므로 다른 터미널을 찾고 있지 않습니다.

이 질문의 제목은 제가 묻는 것과 정확히 같습니다. "실행 파일의 복사본을 별도의 프로세스로 열려면 어떻게 해야 합니까?"

답변1

여기서 보고 있는 내용은 매우 구체적이지만 mate-terminal다른 응용 프로그램에서도 찾을 수 있는 일부 공유 GNOME/GTK+ 인프라를 사용하는 것이 더 일반적입니다(이 pcmanfm역시 언급했습니다).

새 복사본을 시작하면 mate-terminal(아마도 다른 바이너리에서)하다이에 대한 새 프로세스를 만듭니다. 그러나 mate-terminalD-Bus에 연결하고 "공장"을 찾으려고 프로그래밍되어 있습니다. 이 경우 터미널에서 시작된 것에 대한 매개변수를 전달하고 "공장"이 이를 관리하도록 한 다음 새 프로세스를 종료합니다. (공장이 없으면 공장으로 등록되기 때문에 처음 시작된 프로세스가 모든 단말을 관리하게 됩니다.)

"공장"은 D-Bus 경로를 통해 발견됩니다 /org/mate/Terminal/Factory.하드코딩된바이너리 파일을 입력하세요. (따라서 바이너리의 다른 복사본에 복사됩니다.)

특정한 경우에는 명령줄 인수를 mate-terminal전달하여 이 동작을 비활성화할 수 있습니다 . --disable-factory(바라보다매뉴얼 페이지자세한 내용은. )

이는 mate-terminal작동 방식이 매우 독특합니다. 특히 pcmanfm실제로는 같은 방식으로 수행되지 않습니다. pcmanfm별도의 프로세스를 시작하는 방법이 지원되는지, 아니면 D-Bus를 통해 기존 인스턴스와 통신하는 것이 작동하는 유일한 방법인지는 확실하지 않습니다 . ( pcmanfm이런 경우가 있는지 조사해 보아야 합니다 .)

답변2

해결 방법: 별도의 프로세스를 생성하는 도구를 사용하십시오.

내 주 컴퓨터의 데스크탑에 세 개의 터미널 창을 생성하는 쉘 스크립트가 있습니다. 제 스크립트의 몇 가지 아이디어를 바탕으로 여러분에게 유용할 수 있는(또는 필요한 것을 만드는 데 도움이 될 수 있는) 다음을 시도했습니다.

#!/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

vdockw=68설치된 2개의 18.04 LTS 시스템인 Lubuntu(있는 그대로)와 표준 Ubuntu( ) 에서 작동하는지 테스트했습니다 .

shellscript는 리포지토리에서 사용 가능 하고 다음을 사용하여 설치할 수 있는 패키지 sakura wmctrl및 Maybe를 사용합니다.xtermuniverse

sudo apt update
sudo apt install sakura wmctrl xterm

관련 정보