Documentation
未記錄的選項“netserver -D”的意圖是什麼?
該
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 服務的第一種方式。