Xterm

終端模擬器和 btsync 行為

  • March 19, 2014

我已經下載了 BitTorrent Sync 二進製文件。該程序只提供了一個 Web UI 界面。我正在嘗試使用終端模擬器為守護程序創建一個視窗,因為我不需要 always online btsync。當我執行時:

cd ~/.btsync/; konsole -e "./btsync --nodaemon"

btsync當我關閉 konsole 視窗點擊 X 按鈕時,守護程序退出。當我執行時:

cd ~/.btsync/; uxterm -e "./btsync --nodaemon"

xterm當我點擊視窗關閉按鈕時,視窗仍在執行。當我執行時:

cd ~/.btsync/; urxvt -e "./btsync --nodaemon"

然後我關閉rxvt視窗,btsyncDAEMON STILL RUNS 在後台執行。

我試圖用來urxvt為“守護程序視窗”分配一個圖示和一個標題,我唯一的解決方案是執行這個腳本:

#!/bin/sh
cd ~/.btsync/
echo BitTorrent Sync Web UI: http://127.0.0.1:8888/gui/en/index.html
echo
exec ~/.btsync/btsync --log ~/.btsync/sync.log --nodaemon

在文件中使用此命令行.desktop

Exec=/usr/bin/urxvt -fn "xft:Inconsolata" -icon ~/.btsync/btsync.png -iconic -title "BitTorrent Sync" -e btsync; /bin/kill $(cat ~/.btsync/.sync/sync.pid)

用於在視窗關閉/bin/kill時關閉守護程序。rxvt我的問題是:有人知道為什麼konsole, xterm,rxvt在這種情況下不具有相同的行為嗎?由於這個原因,我不能x-terminal-emulator用來概括我的程式碼,而且我有多個客戶端使用不同的 Linux 桌面環境。

終端關閉時的退出是由以下兩種情況之一引起的:

  1. 在標準輸入上獲取 EOF
  2. 接收 SIGHUP

在我的測試中,xterm 和 konsole 都這樣做,所以不清楚為什麼行為會有所不同,除非你從最近的(雖然現在已修復)nVidia 錯誤中獲得隨機中斷的信號(請參閱升級後,標題欄中的 X 按鈕不再關閉xterm)。

你可以nohup用來確保既不退出。

但是,我會注意到-e終端仿真器之間的語法不同。例如,konsole -e 'sleep 60'將立即退出;xterm -e 'sleep 60'將等待 60 秒。如果您刪除引號(將每個參數作為單獨的參數傳遞),它將在兩個終端中工作。

$ konsole -e sleep 60    # works
$ xterm -e sleep 60      # works
$ konsole -e 'sleep 60'  # FAILS
$ xterm -e 'sleep 60'    # works

嚴格來說,Debian Policy 說x-terminal-emulator -e必須像在 xterm 中那樣工作,但隨後指定了 xterm 在某一時刻的行為(在最後一種情況下它會失敗)……但是 xterm 改變了它的行為。請參閱Debian 錯誤 648271, 11.8.3 “提供終端仿真器的軟體包”說 xterm 將 -e 選項直接傳遞給 exec

因此,可能只是您使用-e錯誤;你應該這樣做:

cd ~/.btsync/; konsole -e ./btsync --nodaemon

請注意缺少引號。

引用自:https://unix.stackexchange.com/questions/120446