文書化されていないオプション「netserver -D」の意図は何ですか?

文書化されていないオプション「netserver -D」の意図は何ですか?

このnetserverバイナリは通常iperf3.inとペアになります。多くの文脈他のStack Exchangeの質問を含む、起動方法がnetserverミステリーオプションとして表示されます-D

この-Dオプションはマニュアルページに文書化されておらず、このオプションが他の操作を実行するようには思えず、netserver(1)私が見つけた他の場所から始める理由もありません。-D

だから私の質問に答えることができれば --Dこのオプションの目的は何ですか?拡張して、このオプションはどこに文書化されていますか-D

-D以下は、perを含むサンプル単位ファイルです。フラビオのブログこれは私が使用しているものに近いです。

[Unit]
Description="Netperf netserver daemon"
After=network.target

[Service]
ExecStart=/usr/local/bin/netserver -D

[Install]
WantedBy=multi-user.target

答え1

調べる1つの方法はソースコードを見る:誘発する-Dnetserverいいえデーモン化して子か確認をスキップしますinetd

netserver -hこれに言及すると(部分的に):

Usage: netserver [options]

Options:
[...]
    -D                Do not daemonize

したがって、オプションの目的はnetserver保護されるのを防ぐことです。つまりバックグラウンドで実行するように独自にフォークします。

systemd デバイスでは、このオプションの目的は次のとおりです。扱いやすいサービスとして。

答え2

D表すこともできるデバッグ、その意図は表示されていないが、開発者追加するとき(可能他の人に代わって):

commit 88eecaf68174e4e0190e2b866e0bcb59b81b6061                                 
Author: raj <raj@5bbd99f3-5903-0410-b283-f1d88047b228>                          
Date:   Mon Jul 11 21:58:41 2011 +0000                                          
                                                                            
massive re-write of src/netserver.c to clean out old spaghetti allow multiple listen sockets for control and run netserver without daemonizing or spawning children to avoid fork calls which may not sit well with various bypass libraries.  this has probably broken the Windows code and perhaps other platforms as well but it has been tested under linux

使用源泉(つまり、読むnetserver.c):

case 'D':
  /* perhaps one of these days we'll take an argument */
  want_daemonize = 0;
  not_inetd = 1;
  break;

最初の変数はwant_daemonize次の目的で使用されます。同じファイルプログラムが次の場所に配置されるかどうかを制御します。背景:

/* we are the top netserver process, so we have to create the
   listen endpoint(s) and decide if we want to daemonize */
setup_listens(local_host_name,listen_port,local_address_family);
if (want_daemonize) {
  daemonize();
}
accept_connections();

別の変数は、次のかどうかnot_inetdを制御します。努力するinetdサービスのソケットを開きます。

開発者は、例えば2002のセクションで説明されているように、他のプログラムの長期的な動作を検討することができます。29.2.1 独立サービスの呼び出し(実際にはオプションの意味は逆になりますが):

次のことを試してください(角かっこ内の代替コマンド)
/usr/sbin/in.ftpd -D
( /usr/sbin/in.wuftpd -s )
-Dオプションはサービスの開始を指示します。悪魔モード(またはスタンドアロンモード)。これがインターネットサービスを運営する最初の方法でした。

関連情報