『入門 OpenSSH』を読んでいたら、
eval `ssh-agent`
ではなくて、
ssh-agent bash
を使え、と書いてあった。そこで、~/.zlogin に
ssh-agent zsh
と書くようにした。こうすると、zsh は ssh-agent のサブプロセスとして実行され、ssh が必要とする SSH_AGENT_PID などの環境変数がサブプロセスへと継承される。はずである。zsh が終了すると、ssh-agent を終了する。
さて上のように ~/.zlogin に書いた状態でログインして pstree を見てみると、
init-+ |-login---zsh---zsh-+-ssh-agent `-pstree
となっている。おかしい。ssh-agent の子プロセスになっているはずの zsh が逆に親プロセスになっている。にもかかわらず、SSH_AGENT_PID などの環境変数は適切に設定されている。これはどうしてだろう。これが最初の問題。
ssh-agent のソースを読んでみた。答えは簡単で、ssh-agent は子プロセスではなく、親プロセスで execvp を実行しているんですね。子プロセスの方で、ssh-agent の仕事を引き受けている。だから、上のような pstree の表示になる。
では、次の問題。zsh が終了した時に子プロセスである ssh-agent は終了するだろうか。終了しないなら、どのような時に終了しないか。
ワイヤレスヘッドホンを買おうと思った。だけど、ヘッドホンとスピーカーを切替えるのにコンポのところまで歩いていかないといけないんじゃあんまり便利にならないなあと思い直す。
リモコンひとつで、ヘッドホンとスピーカーを切替えることが出来るような何かって売ってないんですかね。
最近のコメント