信號 09 | 函數pause

函數pause

調用該函數可以造成進程主動掛起,等待信號喚醒,調用該系統調用的進程處于阻塞狀態(主動放棄CPU)直到有信號遞達將其喚醒。


  • 將進程置為可中斷睡眠狀態。然后?它調用schedule(),使linux進程調度器找到另一個進程來運行。
  • pause使調用者進程掛起,直到一個信號被捕捉。

pause() return only when a signal? was caught and signal-catching function returned, In this case pause() return -1, and errno is set to EINTR.

?

1. pause函數原型:?

#include<unistd.h>
int pause(void);返回值:-1; errno設置為EINTR

返回值:

  • 如果信號的默認處理動作是終止進程,則進程終止,pause函數沒有機會返回。
  • 如果信號的默認動作是忽略,進程繼續處于掛起狀態,pause函數不返回
  • 如果信號的處理動作是捕捉,則【調用完信號處理函數之后,pause返回-1】errno設置為EINTR,表示“被信號中斷”
  • pause收到的信號不能屏蔽,如果被屏蔽,那么pause就不能被喚醒。

?

1. 測試代碼

#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<errno.h>
#include<unistd.h>void catch_sigalrm(int signo)
{;
}unsigned int mysleep(unsigned int seconds)
{int ret;struct sigaction act, oldact;act.sa_handler = catch_sigalrm;sigemptyset(&act.sa_mask);act.sa_flags = 0;ret = sigaction(SIGALRM, &act, &oldact);if(ret == -1) {perror("sigaction error");exit(1);}alarm(seconds); ret = pause();  //主動掛起,等待信號if(ret == -1 && errno == EINTR) {printf("pause sucess\n");}ret = alarm(0); //防止異常產生sigaction(SIGALRM, &oldact, NULL);//恢復AIGALRM信號舊有的處理方式return ret;
}int main()
{while(1) {mysleep(3);printf("----------------------------\n");}return 0;
}

輸出結果:

?

2. 測試代碼:

#include <unistd.h> 
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>void handler(int sig);int main(int argc, char *argv[]){if(signal(SIGINT, handler) == SIG_ERR) {perror("signal error");exit(1);}for(; ;) {pause();printf("pause return\n");}     return 0;}void handler(int sig){printf("recv a sig = %d\n", sig);}

輸出結果:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385621.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385621.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385621.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一文搞懂JVM架構和運行時數據區,全網最新

1.Java基礎面試知識點 Java中和equals和hashCode的區別int、char、long各占多少字節數int與integer的區別探探對Java多態的理解String、StringBuffer、StringBuilder區別什么是內部類&#xff1f;內部類的作用抽象類和接口區別抽象類的意義抽象類與接口的應用場景抽象類是否可…

一條正確的Java職業生涯規劃,幫你突破瓶頸

面試題模塊介紹&#xff1a; 一、Java 基礎 JDK 和 JRE 有什么區別&#xff1f; 和 equals 的區別是什么&#xff1f;兩個對象的 hashCode()相同&#xff0c;則 equals()也一定為 true&#xff0c;對嗎&#xff1f;final 在 java 中有什么作用&#xff1f;java 中的 Math.roun…

【線程】線程基本函數

一、pthread_self函數 功能&#xff1a;獲取線程ID。 pthread_t pthread_self(void); 線程ID&#xff1a;pthread_t類型&#xff0c;本質&#xff1a;在Linux為無符號整數(%lu)&#xff0c;其他系統可能是結構體實現線程ID是進程內部識別標志。&#xff08;兩個進程間&#…

一條正確的Java職業生涯規劃,順利通過阿里Java崗面試

珍藏版&#xff08;1&#xff09;——Mybatis入門 1.什么是MyBatis 2.為什么我們要用Mybatis? 3.Mybatis快速入門 3.1 導入開發包 3.2準備測試工作 3.3 創建mybatis配置文件 3.4 編寫工具類測試是否獲取到連接 3.5 創建實體與映射關系文件 3.6 編寫DAO 4.Mybatis工作…

線程控制 12 | 線程屬性

本節作為指引性介紹&#xff0c;linux下線程的屬性是可以根據實際項目需要&#xff0c;進行設置&#xff0c;之前我們討論的線程都是采用線程的默認屬性&#xff0c;默認屬性已經可以解決絕大部分開發遇到的問題。如我們對程序的性能提出更高的要求那么需要設置線程屬性&#x…

一次違反常規的Java大廠面試經歷,系列教學

第一部分 Java相關以及答案 答案 第二部分算法跟編程 第三部分html&JavaScript&ajax部分 答案 第四部分Javaweb部分 答案 第五部分數據庫部分 答案 第六部分XML部分 答案 第七部分.流行的框架與新技術 答案 第八、九部分.軟件工程與設計模式以及j2ee部分 最后 筆者…

函數perror、strerror

perror函數 函數原型&#xff1a; #include<stdio.h> void perror(const char *msg); 測試代碼&#xff1a; #include<unistd.h> #include<errno.h> #include<stdio.h>int main() {int ret;ret close(10);if(ret -1) {perror("close error…

一次違反常規的Java大廠面試經歷,重難點整理

目錄 Kafka的基本介紹Kafka的設計原理分析Kafka數據傳輸的事務特點Kafka消息存儲格式副本&#xff08;replication&#xff09;策略Kafka消息分組&#xff0c;消息消費原理Kafak順序寫入與數據讀取消費者&#xff08;讀取數據&#xff09; Kafka的基本介紹 Kafka是最初由Lin…

一步搞定你疑惑的數據結構與算法系列,原理+實戰講解

螞蟻金服一面&#xff1a; 下午杭州的電話&#xff0c;問有沒有空&#xff0c;果斷有空&#xff0c;雖然感覺略顯緊張&#xff0c;有點懵逼。 面試的題目&#xff1a; HashMap和Hashtable的區別實現一個保證迭代順序的HashMap說一說排序算法&#xff0c;穩定性&#xff0c;復…

互斥量(互斥鎖)

一、互斥量mutex Linux提供一把互斥鎖mutex(也稱之為互斥量)每個線程在對資源操作前都嘗試先加鎖&#xff0c;成功加鎖才能操作&#xff0c;操作結束后解鎖。資源還是共享的&#xff0c;線程間也還是競爭的&#xff0c;但通過鎖將資源的訪問變為互斥操作&#xff0c;而后與時間…

一眼就能看懂的Java自學手冊,終局之戰

珍藏版&#xff08;1&#xff09;——Mybatis入門 1.什么是MyBatis 2.為什么我們要用Mybatis? 3.Mybatis快速入門 3.1 導入開發包 3.2準備測試工作 3.3 創建mybatis配置文件 3.4 編寫工具類測試是否獲取到連接 3.5 創建實體與映射關系文件 3.6 編寫DAO 4.Mybatis工作…

Centos 6.x

1. centos升級gcc教程&#xff1a;鏈接 2. 虛擬機中的Centos聯通網絡&#xff1a;鏈接 3. 虛擬機安裝Centos7系統教程&#xff1a;鏈接

Java虛擬機學習集錦是我攢來的,帶你碾壓面試官!

1. 一致性&#xff08;Consistency&#xff09; 一致性&#xff08;Consistency&#xff09;是指多副本&#xff08;Replications&#xff09;問題中的數據一致性。可以分為強一致性、順序一致性與弱一致性。 1.1 強一致性&#xff08;Strict Consistency&#xff09; 也稱為…

Java虛擬機學習集錦是我攢來的,看這篇文章準沒錯!

一面 介紹一下自己 問項目經歷, 聊"數據同步" 接著聊上了 K8S 的項目 有沒有什么鉆研得比較深得技術&#xff1f;&#xff08;大佬&#xff1a;kubernetes, golang, prometheus, java&#xff09; kubernetes 的架構是怎么樣的? 這個問題很大&#xff0c;拆成 …

文件描述符、函數open和openat

文件描述符 pcb&#xff1a;結構體一個進程有一個文件描述符&#xff1a;1024文件描述符&#xff1a;尋找磁盤文件函數open和openat 函數原型&#xff1a; include<sys/stst.h> #include<fcntl.h>int open(const char *pathname, int flags); int open(const ch…

Java這些高端技術只有你還不知道,移動架構師成長路線

并發編程共享模型篇 并發編程概覽進程與線程Java線程共享模型之管程共享模型之內存共享模型之無鎖共享模型之不可變共享模型之工具 共享模型之管程 原理之 Monitor(鎖) 原理之偽共享 模式篇—正確姿勢 同步模式之保護性智停同步模式之Blking同步模式之順序控制異步模式之生產…

函數read、write、lseek

函數原型&#xff1a; #include<unistd.h> ssize_t read(int fd, void *buf, size_t count);返回值&#xff1a;讀到的字節數&#xff0c;若已到文件尾&#xff0c;返回0&#xff1b;若出錯&#xff0c;返回-1 參數&#xff1a; fd&#xff1a;函數open的返回值buf&a…

Java這些高端技術只有你還不知道,薪資翻倍

正文 我的第一份工作是在一家外企&#xff0c;當時抱著“逃離”上海的想法去了二線城市的分公司&#xff0c;但是管理文化氛圍跟總部幾乎都是一樣的&#xff0c;這份工作經歷對我后面的工作不論是做事風格、習慣上還是思考問題的方式方法上都有很大的影響。后面陸續進入國企&a…

函數dup和dup2

函數原型&#xff1a; #include<unistd.h> int dup(int oldfd);返回值&#xff1a;若成功&#xff0c;返回新的文件描述符&#xff1b;若出錯&#xff0c;返回-1 參數&#xff1a; oldfd&#xff1a;要復制的文件描述符dup調用成功&#xff1a;有兩個文件描述符指向同…

Java進階面試資料無償分享!真香系列

8-22 投遞簡歷 8-24 一面&#xff08;大概1h50min&#xff09; 0、currenthashmap怎么擴容的&#xff1f;fwn為什么固定hash -1&#xff0c;這樣設計有什么好處&#xff1f;幫助擴容是發生在什么階段?讀線程和寫線程都會幫助擴容嗎&#xff1f;擴容的時候任務具體怎么協調的&…