掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在Linux上編譯程序是一個(gè)很常見的任務(wù),而讓程序自動(dòng)后臺(tái)編譯可以讓我們的工作更加輕松。在本文中,我們將介紹如何在Linux上讓程序自動(dòng)后臺(tái)編譯。

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括麥積網(wǎng)站建設(shè)、麥積網(wǎng)站制作、麥積網(wǎng)頁(yè)制作以及麥積網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,麥積網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到麥積省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
之一步:設(shè)置編譯環(huán)境
在開始之前,我們需要確保我們的操作系統(tǒng)擁有足夠的軟件包和依賴項(xiàng)來支持編譯任務(wù)。此外,我們需要設(shè)置正確的環(huán)境變量來確保編譯器和鏈接器可以找到它們需要的庫(kù)和頭文件。
設(shè)置環(huán)境變量的方法可能因不同的Linux發(fā)行版而異。通常,我們需要編輯以下文件:
– /etc/environment
– /etc/profile
– ~/.bashrc
在這些文件中,我們可以添加以下環(huán)境變量:
– PATH:包含我們需要的編譯器和鏈接器的路徑。
– CPATH:包含C語(yǔ)言頭文件的路徑。
– C_INCLUDE_PATH:包含C語(yǔ)言頭文件的路徑。
– CPLUS_INCLUDE_PATH:包含C++語(yǔ)言頭文件的路徑。
– LD_LIBRARY_PATH:包含共享庫(kù)的路徑。
當(dāng)我們完成環(huán)境變量的設(shè)置后,我們需要重新啟動(dòng)我們的終端或重新加載我們編輯的文件。
第二步:安裝自動(dòng)化構(gòu)建工具
在Linux上有許多工具可以讓我們自動(dòng)化構(gòu)建任務(wù)。以下是其中的一些:
– make:可用于管理大型項(xiàng)目的編譯任務(wù)。
– cmake:可用于自動(dòng)生成makefile。
– ninja:速度更快的自動(dòng)化構(gòu)建工具。
– scons:用Python編寫的構(gòu)建工具,支持跨平臺(tái)編譯。
安裝這些工具的方法可能因不同的Linux發(fā)行版而異。通常,我們可以使用運(yùn)行以下命令來安裝這些軟件包:
– Debian、Ubuntu:sudo apt-get install make cmake ninja-build scons
– Fedora、Red Hat、CentOS:sudo yum install make cmake ninja-build scons
– Arch:sudo pacman -S make cmake ninja scons
我們也可以從源代碼構(gòu)建這些工具,具體請(qǐng)參閱它們的官方文檔。
第三步:設(shè)置自動(dòng)化構(gòu)建任務(wù)
一旦我們安裝了自動(dòng)化構(gòu)建工具,我們可以使用它們來設(shè)置自動(dòng)化構(gòu)建任務(wù)。以下是一個(gè)使用make命令的簡(jiǎn)單示例:
“`
.PHONY: all
all:
make
“`
在此示例中,我們使用make命令編譯所有文件。我們可以將此代碼片段保存為Makefile文件,并將其存儲(chǔ)在我們的項(xiàng)目根目錄中。
如果我們使用的是其他自動(dòng)化構(gòu)建工具,我們可以按照其官方文檔設(shè)置自動(dòng)化構(gòu)建任務(wù)。
第四步:創(chuàng)建自動(dòng)化編譯腳本
自動(dòng)化編譯腳本是一種讓我們?cè)诤笈_(tái)自動(dòng)編譯程序的工具。以下是一個(gè)簡(jiǎn)單的bash腳本示例:
“`
#!/bin/bash
while true
do
make
sleep 2
done
“`
在此示例中,我們使用一個(gè)while循環(huán),無限編譯我們的程序。這個(gè)腳本將一直運(yùn)行,直到我們手動(dòng)停止它。我們可以將此代碼片段保存為build.sh文件,并將其存儲(chǔ)在我們的項(xiàng)目根目錄中。
一旦我們創(chuàng)建了自動(dòng)化編譯腳本,我們需要通過運(yùn)行以下命令使它可執(zhí)行:
“`
chmod +x build.sh
“`
第五步:運(yùn)行自動(dòng)化編譯腳本
要在后臺(tái)啟動(dòng)自動(dòng)化編譯腳本,我們可以運(yùn)行以下命令:
“`
./build.sh &
“`
在此命令中,我們?cè)谀_本名后添加了一個(gè)&符號(hào),以便在后臺(tái)運(yùn)行腳本。我們還可以使用nohup命令來使該腳本在后臺(tái)運(yùn)行:
“`
nohup ./build.sh > build.log 2>&1 &
“`
在此命令中,我們使用nohup命令讓腳本在后臺(tái)運(yùn)行,并將所有輸出寫入build.log文件。&符號(hào)告訴Linux將命令放在后臺(tái)運(yùn)行,而2>&1則重定向所有錯(cuò)誤到標(biāo)準(zhǔn)輸出。
結(jié)論
在Linux上讓程序自動(dòng)后臺(tái)編譯需要按照以下步驟進(jìn)行操作:
– 設(shè)置編譯環(huán)境
– 安裝自動(dòng)化構(gòu)建工具
– 設(shè)置自動(dòng)化構(gòu)建任務(wù)
– 創(chuàng)建自動(dòng)化編譯腳本
– 運(yùn)行自動(dòng)化編譯腳本
這些步驟可以讓我們更輕松地管理我們的編譯任務(wù),并確保我們的程序始終保持最新狀態(tài)。
相關(guān)問題拓展閱讀:
守護(hù)進(jìn)程的編程要點(diǎn) :
1. 在后臺(tái)運(yùn)行。
為避免掛起控制終端將Daemon放入后臺(tái)執(zhí)行。方法是在進(jìn)程中調(diào)用fork使父進(jìn)程終止,讓Daemon在子進(jìn)程中后臺(tái)執(zhí)行。
if(pid=fork())
exit(0);//是父進(jìn)程,結(jié)束父進(jìn)程,子進(jìn)程繼續(xù)
2. 脫離控制終端,登錄會(huì)話和進(jìn)程組
有必要先介紹一下Linux中的進(jìn)程與控制終端,登錄會(huì)話和進(jìn)程組之間的關(guān)系:進(jìn)程屬于一個(gè)進(jìn)程組,進(jìn)程組號(hào)(GID)就是進(jìn)程組長(zhǎng)的進(jìn)程號(hào)(PID)。登錄會(huì)話可以包含多個(gè)進(jìn)程組。這些進(jìn)程組共享一個(gè)控制終端。這個(gè)控制終端通常是創(chuàng)建進(jìn)程的登錄終端。
控制終端,登錄會(huì)話和進(jìn)程組通常是從父進(jìn)程繼承下碰攜來的。我們的目的就是要擺脫它們,使之不受它們的影響。方法是在第1點(diǎn)的基礎(chǔ)上,調(diào)用setsid()使進(jìn)程成為會(huì)話組長(zhǎng):
setsid();
說明:當(dāng)進(jìn)程是會(huì)話組長(zhǎng)時(shí)setsid()調(diào)用失敗。但之一點(diǎn)已經(jīng)保證進(jìn)程不是會(huì)話組長(zhǎng)。setsid()調(diào)用成功后,進(jìn)程成為新的會(huì)話組長(zhǎng)和新的進(jìn)程組長(zhǎng),并與原來的登錄會(huì)話和進(jìn)程組脫離。由于會(huì)話過程對(duì)控制終端的獨(dú)占性,進(jìn)程同時(shí)與控制終端脫離。
3. 禁止進(jìn)程重新打開控制終端
現(xiàn)在,進(jìn)程已經(jīng)成為無終端的會(huì)話組長(zhǎng)。但它可以重新申請(qǐng)打開一個(gè)控制終端。可以通過使進(jìn)程不再成為會(huì)話組長(zhǎng)來禁止進(jìn)程重新打開控制終端:
if(pid=fork())
exit(0);//結(jié)束之一子進(jìn)程,第二子進(jìn)程繼續(xù)(第二子進(jìn)程不再是會(huì)話組長(zhǎng))
4. 關(guān)閉打開的文件描述符
進(jìn)程從創(chuàng)建它的父進(jìn)程那里繼承了打開的文件描述符。如不關(guān)閉,將會(huì)浪費(fèi)系統(tǒng)資源,造成進(jìn)程所在的文件系統(tǒng)無法卸下以及引起無法預(yù)料的錯(cuò)誤。按如下方法關(guān)閉它們:
for(i=0;i 關(guān)閉打開的文件描述符close(i);>
5. 改變當(dāng)前工作目錄
進(jìn)程活動(dòng)時(shí),其工作目錄所在的文件系統(tǒng)不能卸下。一般需要將伍攔工作目錄改變到根目錄。對(duì)于需要轉(zhuǎn)儲(chǔ)核心,寫運(yùn)行日志的進(jìn)程將工作目錄改變到特定目錄如/tmpchdir(“/”)
6. 重設(shè)文件創(chuàng)建掩模
進(jìn)程從創(chuàng)建它的父進(jìn)程那里繼承了文件創(chuàng)建掩模。它可能修改守護(hù)進(jìn)程所創(chuàng)建的文件的存取位。為防止這一點(diǎn),將文件創(chuàng)建掩模清除:umask(0);
7. 處理SIGCHLD信號(hào)
處理SIGCHLD信號(hào)并不是必須的。但對(duì)于某些進(jìn)程,特別是服務(wù)器進(jìn)程往往在請(qǐng)求到來時(shí)生成子進(jìn)程處理請(qǐng)求。如果父進(jìn)程不等待子進(jìn)程結(jié)束,子進(jìn)程將成為 僵尸進(jìn)程(zombie)從而占用系統(tǒng)資源。如果父進(jìn)程等待子進(jìn)程結(jié)束,將增加父進(jìn)程的負(fù)擔(dān),影響服務(wù)器進(jìn)程的并發(fā)性能。在Linux下可以簡(jiǎn)單地將 SIGCHLD信號(hào)的操作設(shè)為SIG_IGN。
signal(SIGCHLD,SIG_IGN);
這樣,笑橘伏內(nèi)核在子進(jìn)程結(jié)束時(shí)不會(huì)產(chǎn)生僵尸進(jìn)程。這一點(diǎn)與BSD4不同,BSD4下必須顯式等待子進(jìn)程結(jié)束才能釋放僵尸進(jìn)程。
關(guān)于linux讓程序后臺(tái)編譯的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開通再付費(fèi)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)-網(wǎng)站建設(shè),軟件開發(fā)老牌服務(wù)商!微信小程序開發(fā),APP開發(fā),網(wǎng)站制作,網(wǎng)站營(yíng)銷推廣服務(wù)眾多企業(yè)。電話:028-86922220

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流