
exec screen
スクリーンセッションですでに実行されていない場合は、シェルを起動するように設定しました。したがって、TTYでは、プロセスツリーは次のようになります。
login───screen───screen───zsh.
ほとんどすべての場合、これは私が望むものですが、時には画面なしで何かを実行したいと思い、通常の設定を変更せずにそうしたいと思います。トップレベルの画面プロセスを次のような他のもの(シェルなど)に置き換えるコマンドを探しています。
login───bash,
再度ログアウトし、myまたはuseを.zshrc
一時的に変更する必要はありませんchsh
。
答え1
なしでスクリーンセッションを開始する必要があります.zshrc
。現在のプロセスを新しいプロセスに置き換えます。したがって、もはや存在しないので、元のプロセスに戻ることはできません。exec
screen
exec
で始めることができない場合は、exec
次pstree
のようになります(-p
理解のためにPIDを表示するためにpstreeに追加しました)。
|-login(857)---zsh(31597)---screen(1105)---screen(1108)---zsh(1109)-+-pstree(1209)
$ echo $$
1109
我々は現在、サブプロセスにあるので、screen
閉じるscreen
以外screen
の操作を実行するか、screen
- を使用して分離したい場合 。再:ctrla dpstree
|-screen(1108)---zsh(1109)
|-login(857)---zsh(31597)-+-pstree(1481)
$ echo $$
31597
最初の行はscreen
内部で実行されているシェルから切り離され、2行目は現在実行されているシェル(現在の場所)です。ご覧のとおり、この$$
変数には最初のプロセスのPIDが含まれていますzsh
。
画面に戻るには、次を呼び出します。
screen -r
これで最初のシナリオに似ています。
|-screen(1108)---zsh(1109)-+-pstree(2118)
|-login(857)---zsh(31597)---screen(2112)
$ echo $$
1109
PIDを確認してください。 (1108)のサブシェルに戻りましたscreen
。このscreen
プロセス1108はもはや存在しないので、元の画面1105の子ではない。これが1108の親が再割り当てされた理由です(その親はinit
1のPIDを持っています)。 reconnectを呼び出すと、screen -r
新しいPID(2112)を使用して新しい画面プロセスが作成されます。これらのscreen
プロセスは、単純なUnixソケットまたは名前付きパイプを介して互いに通信します。
答え2
私の提案は、シェルを画面に置き換えるのではなく、画面が実行されているかどうかに応じて起動または接続すると自由に使用できることですctrl+ a-d
if [[ ! $(screen -ls 2>&1) =~ .*No.Sockets.* ]] ; then
screen -U -x
else
echo 'No existing screen sockets found, launching screen!'; screen -U -S session -s `which zsh`
fi
~/.bash_profileまたは~/.bashrcに↑を貼り付けて、ユーザーのデフォルトシェルをbashに設定する必要があります。これにより、新しい画面ウィンドウが作成されるたびに新しいzshプロセスがフォークされ、常に画面セッションに再接続または実行されていない場合は、新しい画面セッションが開始されます。これにより、画面から離れて画面外でタスクを実行できます。たとえば、すでに画面にあるプロセスの1つを移動するには、次のようにします。レプテル。
答え3
以下の方法はやや難しいかもしれませんが、問題を解決することができます。
/etc/passwd ファイルを編集し、ユーザー行をコピーしてユーザーのコピーを作成できます。ユーザー名(最初のフィールド)のみを変更してください。 「新しい」ユーザーのパスワードを設定しますpasswd newuser
。最後に、あなたの名前を変更してユーザー名の確認に.zshrc
変更してください。exec screen
if [ "`id -un`" != "newuser" ]
then
exec screen
fi
ユーザーなしでセッションをしたい場合は、exec screen
通常のユーザーと同じ代替ユーザーとしてログインできます。
達成しようとする目標についてはより良い選択肢があるかもしれませんが、これは役に立ちます。