Documentation

未記錄的選項“netserver -D”的意圖是什麼?

  • October 8, 2020

netserver二進製文件通常與iperf3. 在包括其他 Stack Exchange 問題在內的許多情況下netserver,啟動方法顯示為一個神秘-D選項。

-D選項未記錄在 manpagenetserver(1)中,該選項似乎也沒有做任何不同的事情,也沒有在-D我能發現的其他任何地方使用給定啟動的原因。

所以我的問題是,如果可以回答 -打算做什麼**?-D**並且通過擴展,-D選項記錄在哪裡?

這是一個包含-D, per Flavio’s Blog的範例單元文件,它與我正在使用的內容接近:

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

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

[Install]
WantedBy=multi-user.target

找出答案的一種方法是查看原始碼-D導致netserver不dæmonise,跳過檢查它是否是一個inetd孩子。

netserver -h提到這一點(部分):

Usage: netserver [options]

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

因此,in 選項的目的netserver是防止它被惡魔化,分叉自己在後台執行。

systemd 單元中此選項的目的是使其更易於作為服務處理。

D可能代表debug ,儘管開發人員在添加它時沒有提供其意圖的指示(可能代表另一個):

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

使用原始碼(即 read 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**選項指示服務以守護程序模式(或獨立模式)啟動。這是執行 Internet 服務的第一種方式。

引用自:https://unix.stackexchange.com/questions/613408