5

これはばかげた問題かもしれませんが、スタックオーバーフローサイトとグーグルを徹底的に掘り下げても、何時間も解決できません。

シェルにログインしたら gkrellm を起動するための .bashrc の基本コードを次に示します。

if ps ax | grep -v grep | grep gkrellm > /dev/null
then
    echo "gkrellm is already running"
else
    command gkrellm &
fi

私はすでに試していました

...
else
    nohup gkrellm &
fi
...

...
else
    gkrellm
    $GK_PID=`pidof gkrellm`
    disown -h $GK_PID
fi
...

gkrellm はバックグラウンド ジョブとして適切に配置されており、(予想どおり) シェルを使用できます。しかし、同じシェルから他のアプリを起動しても、Ctrl-c を押すと gkrellm が終了します。Ctrl-c を押したときに gkrellm が閉じないようにするにはどうすればよいですか?

念のため。私は KiTTY と呼ばれる PuTTY クローンを使用していますが、それは問題ではないと考えています。

手伝ってくれてありがとう!

4

3 に答える 3

2

この問題をほとんど忘れていて、ずっと前に実用的な解決策を見つけた後、自分の質問に答えました;)フォローは私の.bashrcで何年もうまく機能します

mygkrellm()
{
    if pidof -x "gkrellm" >/dev/null; then
    echo "Gkrellm is already running. Go to shell!"       
    else
    nohup "/usr/bin/gkrellm" &
    fi
}
于 2016-01-09T09:33:16.087 に答える
1

「nohupgkrellm&」を次のように置き換えてみてください。

screen -S gkrellm -d -U -m gkrellm

これにより、gkrellmを実行しているデタッチされた画面セッションが開始され、現在のシェルセッションは考慮されません。.bashrcから開始することが最善の解決策であるかどうかはわかりませんが、ウィンドウマネージャーの自動開始機能を使用する方が理にかなっています。

編集:質問を正しく読んだかどうかわかりませんが、KiTTYを使用してLinuxホストに接続し、X転送を介してリモートでgkrellを実行していますか?その場合、明らかにウィンドウマネージャーの機能を使用することはできません。:)

于 2012-06-16T20:27:56.463 に答える
1

bash (disownおよび&>/dev/null)を使用して、bg ( ) でアプリ
を実行する必要があります。gkrellm &disown

if ps -C gkrellm -o user | grep "$LOGNAME" &>/dev/null 
then echo "gkrellm is already running"
else gkrellm & disown
fi

移植性を高めてposix shを使用する場合は、(および POSIXの一部)
を使用する必要があり、 それをバックグラウンド化する必要があります ( )の代わりに 使用することもできます。nohupcoreutils
nohup cmd &
.profile.bashrc

if ps -C gkrellm -o user | grep "$LOGNAME" 2>/dev/null 1>&2
then echo "gkrellm is already running"
else nohup gkrellm &
fi

他のアプローチには、@Pontusが答えたように、コマンドが切り離された環境で実行されるdtachscreenまたはのようなツールを使用することが含まれます。tmux

by Pontus :
ウィンドウマネージャーの自動起動機能を使用する方が理にかなっています

確かに:) afaikgkrellmはGUIアプリであるため、.xinitrc(ログインマネージャーがサポートしている場合)またはウィンドウマネージャーの自動起動機能を使用して自動起動することをお勧めします。

于 2012-06-16T23:29:53.580 に答える