Сокат продолжает ждать ввода от стандартного ввода

564
Mario S

Мне нужно запустить эту команду в Mac OS X El Capitan. Я нашел это в этом руководстве о Eclipse Che . Тем не менее, когда я пытаюсь сделать это, socatпродолжает ждать ввода от стандартного ввода.

$ socat -d TCP-LISTEN:2376,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock I'm writing here, and I don't know why socat let me do this  ^C$ 

Мне нужно нажать Ctrl+, Cчтобы вернуться к приглашению. Что я делаю неправильно?

0

1 ответ на вопрос

1
Daniel B

Автор, вероятно, никогда не пробовал это. В руководстве говорится об этой forkопции:

После установления соединения обрабатывает свой канал в дочернем процессе и удерживает родительский процесс, пытающийся создать больше соединений, путем прослушивания или соединения в цикле (пример).

Это означает, socatчто не будет разветвляться до запуска основного цикла прослушивания.

-dВариант только увеличивает подробность (как в debug).

tl; dr: socatне могу этого сделать.

Исходное дерево содержит этот вспомогательный скрипт для запуска socatв фоновом режиме. Вы можете адаптировать его к своим целям. Я не писал этот сценарий!

#! /bin/sh # source: daemon.sh # Copyright Gerhard Rieger 2001 # Published under the GNU General Public License V.2, see file COPYING  # This script assumes that you create group daemon1 and user daemon1 before. # they need only the right to exist (no login etc.)  # Note: this pid file mechanism is not robust!  # You will adapt these variables USER=daemon1 GROUP=daemon1 INIF=fwnonsec.domain.org OUTIF=fwsec.domain.org TARGET=w3.intra.domain.org INPORT=80 DSTPORT=80 # INOPTS="fork,setgid=$GROUP,setuid=$USER" OUTOPTS= PIDFILE=/var/run/socat-$INPORT.pid OPTS="-d -d -lm" # notice to stderr, then to syslog SOCAT=/usr/local/bin/socat  if [ "$1" = "start" -o -z "$1" ]; then  $SOCAT $OPTS tcp-l:$INPORT,bind=$INIF,$INOPTS tcp:$TARGET:$DSTPORT,bind=$OUTIF,$OUTOPTS </dev/null & echo $! >$PIDFILE  elif [ "$1" = "stop" ]; then  /bin/kill $(/bin/cat $PIDFILE) fi