周期性的執(zhí)行某項任務(wù)或等待某個事件發(fā)生的進程,他的運行不依賴shell終端,他的生存周期較長,從開機開始運行直到關(guān)機結(jié)束。
成都網(wǎng)站設(shè)計、做網(wǎng)站介紹好的網(wǎng)站是理念、設(shè)計和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)擁有的網(wǎng)站設(shè)計理念、多方位的設(shè)計風(fēng)格、經(jīng)驗豐富的設(shè)計團隊。提供PC端+手機端網(wǎng)站建設(shè),用營銷思維進行網(wǎng)站設(shè)計、采用先進技術(shù)開源代碼、注重用戶體驗與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。守護進程的創(chuàng)建步驟:? 1.創(chuàng)建一個子進程,讓父進程退出
? fork
? 2.創(chuàng)建新的會話期(在子進程)?
? setsid();
? 3.改變子進程的工作目錄
? chdir("/")
? 4.取消文件權(quán)限掩碼
? umask(0)
? 5.關(guān)閉所有文件描述符
? getdtablesize
? opendir readdir chdir
線程相關(guān)? 定義:線程是一種輕量級的進程用task_struct來標識它,它沒有自己的獨立內(nèi)存空間,它共 享創(chuàng)建它的進程的地址空間。
? 線程創(chuàng)建:? 使用第三方線程庫提供的API
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
??? ?作用:創(chuàng)建一個線程
??? ? *thread:指向線程ID的指針?
??? ?*attr:線程屬性,通常給NULL
??? ?參數(shù)三:指向線程執(zhí)行函數(shù)的函數(shù)指針
??? ?*arg:傳給線程執(zhí)行函數(shù)的入?yún)?br /> ??? ?返回值:0 成功;非0 失敗
?int pthread_join(pthread_t thread, void **retval);
??? ?作用:阻塞等待線程結(jié)束,并回收狀態(tài)值
??? ? thread:線程ID
??? ? **retval:指向線程退出狀態(tài)值的指針
?void pthread_exit(void *retval);
??? ?作用:線程退出函數(shù)
??? ?*retval:線程退出狀態(tài)值
? int pthread_cancel(pthread_t thread);
??? ?作用:取消線程
??? ? thread:線程ID
unubtu=Linux內(nèi)核+各種工具+桌面管理器+各種庫+各種應(yīng)用程序
多線程的通信 同步 互斥
在一個進程中可以創(chuàng)建多個線程,那么多個線程間會存在數(shù)據(jù)通信問題,
?會存在兩個線程相互配合完成一件事情,會存在兩個線程對公共資源的競態(tài)訪問問題
?多線程的數(shù)據(jù)通信-->使用全局變量
??? ?./pthead_com1 ?hello
?多線程的同步-->無名信號量 ?sem_t sem;
??? ?同步:兩個線程按照一定的順序相互配合完成一件事情
pthread1-->hello ? 1S ? sem_t ?sema;-->P/V操作函數(shù)控制sema和semb
pthread2-->world ?1s ? sem_t semb;
??? ?P操作:sem_wait(&sema)
??? ??? ?含義:sem_wait會檢測信號量sema的值是否大于0,若大于0,將sema減一
??? ??? ??? ??? ?同時函數(shù)返回。若等于0,阻塞當前線程。
??? ?V操作:sem_post(&sema)--》非阻塞函數(shù)
??? ??? ?含義:sem_post只會給檢測的信號量sema加1 ??? ? ?
互斥的引入:多個線程可能會使用同一段公共資源,若是同時訪問這段公共資源,就會造成多個線程對公共資源的競爭,從而造成訪問結(jié)果混亂。
如何解決:可以使用互斥鎖。
(1)多個線程能否使用同一個線程執(zhí)行函數(shù)
#include#includevoid *ThreadFunc(void *arg)
{
printf("into thread func---------\r\n");
}
int main()
{
pthread_t tID1 = -1;
pthread_t tID2 = -1;
if(0 != pthread_create(&tID1,NULL,ThreadFunc,NULL))
{
return -1;
}
if(0 != pthread_create(&tID2,NULL,ThreadFunc,NULL))
{
return -1;
}
pthread_join(tID1,NULL);
pthread_join(tID2,NULL);
}
(2)兩個線程給線程執(zhí)行函數(shù)傳入不同的參數(shù),最后執(zhí)行結(jié)果是否發(fā)生混亂?
#include#include#include#define BUF_SIZE 11
void *ThreadFunc(void *arg)
{
int i = 0;
printf("into thread func---------\r\n");
if(NULL == arg)
{
return (void *)NULLL;
}
char *pArr = (char *)arg;
static char buf[BUF_SIZE] = {0};
for(;i< 10; i++)
{
buf[i] = pArr[i];
usleep(5000);
}
printf("buf:%s\r\n",buf);
}
int main()
{
pthread_t tID1 = -1;
pthread_t tID2 = -1;
char arr1[] = "123456789";
char arr2[] = "abcdefghi";
if(0 != pthread_create(&tID1,NULL,ThreadFunc,(void *)arr1))
{
return -1;
}
if(0 != pthread_create(&tID2,NULL,ThreadFunc,(void *)arr2))
{
return -1;
}
pthread_join(tID1,NULL);
pthread_join(tID2,NULL);
}
(3)使用互斥鎖解決兩線程互斥訪問公共資源
pthread_mutex_t mutex;//線程互斥鎖
pthread_mutex_init(&mutex,NULL)
pthread_mutex_lock(mutex);
pthread_mutex_unlock(mutex);
#include#include#include#define BUF_SIZE 11
pthread_mutex_t mutex;
void *ThreadFunc(void *arg)
{
int i = 0;
printf("into thread func---------\r\n");
if(NULL == arg)
{
return (void *)NULLL;
}
pthread_mutex_lock(&mutex);
char *pArr = (char *)arg;
static char buf[BUF_SIZE] = {0};
for(;i< 10; i++)
{
buf[i] = pArr[i];
usleep(5000);
}
printf("buf:%s\r\n",buf);
pthread_mutex_unlock(&mutex);
}
int main()
{
pthread_t tID1 = -1;
pthread_t tID2 = -1;
char arr1[] = "123456789";
char arr2[] = "abcdefghi";
if(-1 == pthread_mutex_init(&mutex,NULL))
{
return -1;
}
if(0 != pthread_create(&tID1,NULL,ThreadFunc,(void *)arr1))
{
return -1;
}
if(0 != pthread_create(&tID2,NULL,ThreadFunc,(void *)arr2))
{
return -1;
}
pthread_join(tID1,NULL);
pthread_join(tID2,NULL);
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁標題:守護進程創(chuàng)建、linux線程-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://aaarwkj.com/article18/gcddp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、云服務(wù)器、品牌網(wǎng)站建設(shè)、App開發(fā)、微信公眾號、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容