>

이 명령 순서는 gedit 입니다.  시작하지만 프로세스 ID에서 종료 할 수 없습니다

$ gedit&
$ t=$!
$ echo $t
4824
$ kill $t
bash: kill: (4824) - No such process

와이즈 비즈에서는 잘 작동 할 것이다.  같은 프로세스,

sleep

차이점은 무엇입니까? sleep 999& [1] 4881 $ t=$! $ echo $t 4881 $ kill $t $ ps -p $t [1] Terminated sleep 999 는 어떻게  프로세스가 종료 되었습니까?

gedit
  • 답변 # 1

    와이즈 비즈  프로세스가 이미종료되었습니다.

    Win32가 와서 사라지기 전 Win16 일에 Windows 응용 프로그램이 주로 어떻게 작동했는지 기억하십시오 : gedit 가 있었던 곳  그리고 hInstance , 많은 응용 프로그램의 두 번째 인스턴스를 실행하려고하면 단순히 첫 번째 인스턴스로 물건을 넘겨 주었으므로 응용 프로그램을 두 번째로 호출하기 때문에 명령 스크립트 도구 (예 : Take Command)를 사용하기가 어려워졌습니다. 화면을 추가 된 창으로 표시했지만 명령 인터프리터가 방금 실행 한 하위 프로세스가 즉시 종료 되었습니까?

    그놈이 리눅스에서 Win16 동작을 다시 가져 왔습니다.

    hPrevInstance 와 같은 GIO 애플리케이션 애플리케이션은 다음과 같이 작동합니다.

    gedit 라는 이름의 등록 된 "서버"가없는 경우  이미 사용자/로그인 데스크탑 버스 ( org.gnome.gedit )에 있음  그것이 첫 번째 인스턴스인지 결정합니다. 그것은 gedit 되었다  서버를 계속 실행합니다.

    org.gnome.gedit 라는 이름의 등록 된 "서버"가있는 경우  이미 사용자/로그인 데스크탑 버스 ( org.gnome.gedit )에 있음  두 번째 또는 후속 인스턴스인지 확인합니다. 명령 행 옵션 및 인수를 전달하여 첫 번째 인스턴스에 Desktop Bus 메시지를 구성한 다음종료합니다.

    그래서 당신이 보는 것은 당신이 gedit 를 가지고 있는지 여부에 달려 있습니다  서버가 이미 실행 중입니다. 그렇지 않은 경우 sebvieira의 신발을 신고 설명 된 동작이 보이지 않는 이유가 궁금합니다. 당신이 있다면, 당신은 당신의 신발에있을 gedit 를 볼 수 있습니다  프로세스는 거의 즉시 종료됩니다. 특히 "첫 번째 인스턴스"로 전송할 명령 행 옵션 또는 인수를 제공하지 않았기 때문입니다. 따라서 더 이상 해당 ID를 가진 프로세스가 없기 때문입니다.

    위에서 언급 한 것처럼 로그인 당 데스크탑 버스가 사용자 별 데스크탑 버스의 "새로운"스타일로 전환되고 갑자기 데스크탑 버스와 데스크탑 버스 사이에 1 : 1 관계가없는 경우 많은 재미가 있습니다. X는 더 이상 표시됩니다. 단일 사용자 버스 전체 인스턴스 응용 프로그램은 갑자기 여러 X 디스플레이와 동시에 통신 할 수 있어야합니다.

    사람들이 gedit 를 실행하려고 할 때 더 큰 즐거움이 뒤 따른다   gedit 를 통한 수퍼 유저 사용자 별 데스크톱 버스에 연결할 수 없거나 잘못된 (수퍼 유저) 데스크톱 버스에 연결할 수 없으므로

    와이즈 비즈에 대한 제안이있다  호출 된 프로세스를실제 편집기 응용 프로그램으로만드는 명령 줄 옵션으로 sudo   gedit 가 지적한 편집기로 유용합니다.  환경 변수 ( gedit 의 많은 일반적인 용도가 아닙니다) EDITOR 에서   EDITOR 로 즉시 종료 될 때). 이 제안은 아직 현실화되지 않았습니다.

    그동안 사람들은 crontab 호출에 대해 완전히 새로운 완전히 새로운 Desktop Bus 인스턴스를 호출하는 것과 같이 간단한 텍스트 편집기의 간단한 두 번째 인스턴스를 갖는 다양한 방법을 가지고 있습니다. git 와 함께 . 물론 이것은 gedit 에 의해 호출 될 때이 개인 버스에서 다른 그놈 데스크탑 버스 서버를 가동시키는 경향이 있습니다. , 전혀 "경량"으로 만들지 않습니다.

    케이크의 착빙은이 권장 사항이나 그와 유사한 것을 따르고 dbus-run-session 라는 쉘 함수를 삽입했을 때입니다.  그것은 즉시 gedit 를 제거  쉘의 작업 목록에서 처리하십시오. gedit 에서 나중에 볼 수 없도록 프로세스가 빠르게 종료 될뿐만 아니라  또는 gedit 하지만 쉘은이를 쉘 제어 작업으로 모니터하지도 않습니다.

    추가 읽기

    앱/Gedit/NewSingleInstance. 그놈 위키. 2013.

    "설명". 와이즈 비즈 . 그놈 개발자 위키.

    https://stackoverflow.com/questions/7553452/

    Stefan Löffler (2011-05-04). 노틸러스에서 시작할 때 실행중인 인스턴스를 재사용하지 않습니다. 버그 # 777292. 런치 패드.

  • 답변 # 2

    죄송 합니다만, 저에게는 효과적입니다 :

    kill
    
    

    ps 를 실행하여 프로세스가 여전히 존재하는지 확인  또는 GApplication . 그렇다면, 당신은 또한 $ gedit& [1] 9391 $ t=$! $ echo $t 9391 $ kill $t [1]+ Terminated gedit 를 할 수 있습니다  

  • 답변 # 3

    다음 코드를 시도했고 스크립트 내에서 작동했습니다. 시도해보십시오

    ps -ef
    
    
    pidof gedit

  • 이전 bash에서 디렉토리 찾기 및 제거
  • 다음 shell script - bash에서 Javascript BTOA 대 base64?