vote up 0 vote down star

I'm starting a ssh tunnel like this:

ssh -f -N $PORT:127.0.0.1:$port example.com

the -f puts ssh into the background, which is what I want. This works, since there is a SSH tunnel set up. But if I use jobs I can't see the ssh connection listed. How come?

flag

Please include your platform – Andrioid Jul 6 at 13:51

3 Answers

vote up 3 vote down check

Because you didn't use bash to send it into the background. jobs only reports on processes that bash itself has sent to the background; it was ssh itself that "daemonized" it, as ericslaw said. To get jobs to report it, you'd do:

ssh -N $PORT:127.0.0.1:$port example.com &
link|flag
vote up 3 vote down

The ssh process likely daemonized, disconnecting from the shell. You can think of it like this (but possibly not in this order):

The 'ssh' process you launched actually closed all it's file descriptors (stdin,stdout,stderr), disconnected from the tty, and forked another child ssh. then called exit on itself. This orphaned the child process and the original ssh process actually 'completes'.

As a result, the original ssh process is complete and the orphaned process is no longer a 'child' of your shell.

Use 'ps -ef' or 'ps -fu$USER' instead to see the ssh process you are interested in.

link|flag
vote up 2 vote down

You can see what program is listening on the port using command:

lsof -i :port

It will give you ssh pid.

link|flag

Your Answer

Get an OpenID
or
never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.