久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

淺談Linux信號機制

瀏覽:198日期:2024-04-08 13:53:07
目錄一、信號列表1.1、實時信號非實時信號1.2、信號狀態1.3、信號生命周期1.4、信號的執行和注銷二、信號掩碼和信號處理函數的繼承2.1、信號處理函數的繼承2.2、信號掩碼的繼承2.3、sigwait 與多線程2.4、多進程下的信號三、apis3.1、信號發生函數3.2、信號處理函數3.3、信號掩碼函數3.4、信號集合變量3.5、信號屏蔽函數一、信號列表

root@ubuntu:# kill -l

 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP

 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL10) SIGUSR1

11) SIGSEGV12) SIGUSR213) SIGPIPE14) SIGALRM15) SIGTERM

16) SIGSTKFLT17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP

21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU25) SIGXFSZ

26) SIGVTALRM27) SIGPROF28) SIGWINCH29) SIGIO30) SIGPWR

31) SIGSYS34) SIGRTMIN35) SIGRTMIN+136) SIGRTMIN+237) SIGRTMIN+3

38) SIGRTMIN+439) SIGRTMIN+540) SIGRTMIN+641) SIGRTMIN+742) SIGRTMIN+8

43) SIGRTMIN+944) SIGRTMIN+1045) SIGRTMIN+1146) SIGRTMIN+1247) SIGRTMIN+13

48) SIGRTMIN+1449) SIGRTMIN+1550) SIGRTMAX-1451) SIGRTMAX-1352) SIGRTMAX-12

53) SIGRTMAX-1154) SIGRTMAX-1055) SIGRTMAX-956) SIGRTMAX-857) SIGRTMAX-7

58) SIGRTMAX-659) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-2

63) SIGRTMAX-164) SIGRTMAX

其中最常見的:

Ctrl + C 觸發的是 SIGINT; Ctrl + 觸發的是SIGQUIT; 但是特別說明下 Ctrl + D 并不是觸發信號,而是產生一個 EOF,這也是為什么在 Python 交互模式按下這個組合會退出 Python 的原因。1.1、實時信號非實時信號

如上,kill列舉出所有信號。實時信號與非實時信號又叫做可靠信號與不可靠信號。SIGRTMIN 及其以后的是實時信號,之前的是非實時信號。區別是實時信號支持重復排隊,但是非實時信號不支持。非實時信號在排隊時候會默認只出現一次,意思就是即使多次發送也終將只收到一個。在隊列的取出順序上也有區別,即最先取出的信號一定是實時信號。

PS:

kill、killall 默認發送SIGTERM 信號。 linux下 SIGKILL不能被阻塞、或忽略。 默認情況下 SIGCHLD 不被忽略,編程時候需要注意這個(要么設置 SIG_IGN 或者主動 wait)。 所有未定義處理函數的信號,默認退出進程。 信號被設置block后仍存在于隊列中只是不被處理,如果放開屏蔽將會被處理。 信號可以中斷sleep調用引起睡眠的進程。1.2、信號狀態

信號的”未決“是一種狀態,指的是從信號的產生到信號被處理前的這一段時間;信號的”阻塞“是一個開關動作,指的是阻止信號被處理,但不是阻止信號產生。

例如在sleep前用 sigprocmask 阻塞了退出信號,然后sleep,然后在sleep的過程中產生一個退出信號,但是此時退出信號被阻塞過,(中文的”阻塞”在這里容易被誤解為一種狀態,實際上是一種類似于開關的動作,所以說“被阻塞過”,而不是“被阻塞”)所以處于“未決”狀態,在 sleep后又用sigprocmask關掉退出信號的阻塞開關,因為之前產生的退出信號一直處于未決狀態,當關上阻塞開關后,馬上退出“未決”狀態,得到處理,這一切發生在sigprocmask返回之前。

1.3、信號生命周期

對于一個完整的信號生命周期(從信號發送到相應的處理函數執行完畢)來說,可以分為三個重要的階段,這三個階段由四個重要事件來刻畫:

1.信號誕生;

2. 信號在進程中注冊完畢;

3.信號在進程中的注銷完畢;

4.信號處理函數執行完畢。相鄰兩個事件的時間間隔構成信號生命周期的一個階段。

下面闡述四個事件的實際意義:

信號'誕生'。信號的誕生指的是觸發信號的事件發生(如檢測到硬件異常、定時器超時以及調用信號發送函數kill()或sigqueue()等)。 信號在目標進程中'注冊';進程的task_struct結構中有關于本進程中未決信號的數據成員:

struct sigpending pending;struct sigpending{ struct sigqueue *head, **tail; sigset_t signal;};

信號在進程中注冊指的就是信號值加入到進程的未決信號集中(sigpending結構的第二個成員sigset_t signal),并且信號所攜帶的信息被保留到未決信號信息鏈的某個sigqueue結構中。只要信號在進程的未決信號集中,表明進程已經知道這些信號的存在,但還沒來得及處理,或者該信號被進程阻塞。

1.信號在進程中的注銷。在目標進程執行過程中,會檢測是否有信號等待處理(每次從系統空間返回到用戶空間時都做這樣的檢查)。如果存在未決信號等待處理且該信號沒有被進程阻塞,則在運行相應的信號處理函數前,進程會把信號在未決信號鏈中占有的結構卸掉。是否將信號從進程未決信號集中刪除對于實時與非實時信號是不同的。對于非實時信號來說,由于在未決信號信息鏈中最多只占用一個sigqueue結構,因此該結構被釋放后,應該把信號在進程未決信號集中刪除(信號注銷完畢);而對于實時信號來說,可能在未決信號信息鏈中占用多個sigqueue結構,因此應該針對占用gqueue結構的數目區別對待:如果只占用一個sigqueue結構(進程只收到該信號一次),則應該把信號在進程的未決信號集中刪除(信號注銷完畢)。否則,不在進程的未決信號集中刪除該信號(信號注銷完畢)。進程在執行信號相應處理函數之前,首先要把信號在進程中注銷。

2.信號生命終止。進程注銷信號后,立即執行相應的信號處理函數,執行完畢后,信號的本次發送對進程的影響徹底結束。

1.4、信號的執行和注銷

內核處理一個進程收到的軟中斷信號是在該進程的上下文中,因此,進程必須處于運行狀態。當其由于被信號喚醒或者正常調度重新獲得CPU時,在其從內核空間返回到用戶空間時會檢測是否有信號等待處理。如果存在未決信號等待處理且該信號沒有被進程阻塞,則在運行相應的信號處理函數前,進程會把信號在未決信號鏈中占有的結構卸掉。當所有未被屏蔽的信號都處理完畢后,即可返回用戶空間。對于被屏蔽的信號,當取消屏蔽后,在返回到用戶空間時會再次執行上述檢查處理的一套流程。

處理信號有三種類型:進程接收到信號后退出;進程忽略該信號;進程收到信號后執行用戶設定用系統調用signal的函數。當進程接收到一個它忽略的信號時,進程丟棄該信號,就象沒有收到該信號似的繼續運行。如果進程收到一個要捕捉的信號,那么進程從內核態返回用戶態時執行用戶定義的函數。而且執行用戶定義的函數的方法很巧妙,內核是在用戶棧上創建一個新的層,該層中將返回地址的值設置成用戶定義的處理函數的地址,這樣進程從內核返回彈出棧頂時就返回到用戶定義的函數處,從函數返回再彈出棧頂時,才返回原先進入內核的地方。這樣做的原因是用戶定義的處理函數不能且不允許在內核態下執行(如果用戶定義的函數在內核態下運行的話,用戶就可以獲得任何權限)。

eg:

#include <assert.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <signal.h>#include <unistd.h>void myHandler(int num){ int ret = 0;if (SIGUSR1 == num) {sigset_t set;ret = sigemptyset(&set);assert(!(-1 == ret));ret = sigaddset(&set, SIGINT);assert(!(-1 == ret));ret = sigaddset(&set, SIGRTMIN);assert(!(-1 == ret));ret = sigprocmask(SIG_UNBLOCK, &set, NULL);assert(!(-1 == ret));printf('解除阻塞 recv sig num: %dn', num); } else if (num == SIGINT || num == SIGRTMIN) {printf('recv sig num: %dn', num); } else {printf(' 其他信號recv sig num: %dn', num); }}int main(void){ pid_t pid; int ret = 0; // 設置回調函數 struct sigaction act; act.sa_handler = myHandler; act.sa_flags = SA_SIGINFO; // 注冊非實時信號的處理函數 ret = sigaction(SIGINT, &act, NULL); assert(!(-1 == ret)); // 注冊實時信號的處理函數 ret = sigaction(SIGRTMIN, &act, NULL); assert(!(-1 == ret)); // 注冊用戶自定義信號 ret = sigaction(SIGUSR1, &act, NULL); assert(!(-1 == ret));// 把 SIGINT SIGRTMIN 軍添加到阻塞狀態字中 sigset_t set; ret = sigemptyset(&set); assert(!(-1 == ret)); ret = sigaddset(&set, SIGINT); assert(!(-1 == ret)); ret = sigaddset(&set, SIGRTMIN); assert(!(-1 == ret)); ret = sigprocmask(SIG_BLOCK, &set, NULL); assert(!(-1 == ret));pid = fork(); assert(!(-1 == ret)); if (0 == pid) {union sigval value;value.sival_int = 10;int i = 0;// 發三次不穩定信號for (i = 0; i < 3; i++){ ret = sigqueue(getppid(), SIGINT, value); assert(!(-1 == ret)); printf('發送不可靠信號 okn');}// 發三次穩定信號value.sival_int = 20;for (i = 0; i < 3; i++){ ret = sigqueue(getppid(), SIGRTMIN, value); assert(!(-1 == ret)); printf('發送可靠信號okn');}// 向父進程發送 SIGUSR1 解除阻塞ret = kill(getppid(), SIGUSR1);assert(!(-1 == ret)); } while (1) {sleep(1); } return 0;}二、信號掩碼和信號處理函數的繼承2.1、信號處理函數的繼承

信號處理函數是進程屬性,所以進程里的每個線程的信號處理函數是相同的。通過fork創建的子進程會繼承父進程的信號處理函數。execve 后設置為處理的信號處理函數會被重置為默認函數,設置為忽略的信號保持不變。意思是如果父進程里信號設置處理為SIG_IGN,那么等到子進程被exec了,這個信號的處理還是被忽略,不會重置為默認函數。

eg:

// test.c --> test#include <stdlib.h> typedef void (*sighandler_t)(int);static sighandler_t old_int_handler; static sighandler_t old_handlers[SIGSYS + 1]; void sig_handler(int signo){ printf('receive signo %dn',signo); old_handlers[signo](signo);} int main(int argc, char **argv){ old_handlers[SIGINT] = signal(SIGINT, SIG_IGN); old_handlers[SIGTERM] = signal(SIGTERM, sig_handler); int ret; ret = fork(); if (ret == 0) {//child// 這里execlp將運行 test2 作為子進程。execlp('/tmp/test2', '/tmp/test2',(char*)NULL); }else if (ret > 0) {//parentwhile(1) { sleep(1);} }else{perror('');abort(); } } ================================================test2.c --> test2#include <stdio.h>int main(int argc, char **argv){ while(1) {sleep(1); } return 0;}

結論:test換成test2后,SIGINT的處理方式還是忽略,SIGTERM被重置為默認的方式。

2.2、信號掩碼的繼承

信號掩碼有以下規則:

1.每個線程可以有自己信號掩碼。

2.fork出來的子進程會繼承父進程的信號掩碼,exec后信號掩碼保持不變。如果父進程是多線程,那么子進程只繼承主線程的掩碼。

3.針對進程發送的信號,會被任意的沒有屏蔽該信號的線程接收,注意只有一個線程會隨機收到。linux下如果都可以所有線程都可以接收信號,那么信號將默認發送到主線程,posix系統是隨機發送。

4.fork之后子進程里pending的信號集初始化為空,exec會保持pending信號集。

#include <stdio.h>#include <signal.h>#include <unistd.h>#include <stdlib.h>#include <pthread.h> typedef void (*sighandler_t)(int); static void *thread1(void *arg){ sigset_t set; printf('in thread1n'); sigemptyset(&set); sigaddset(&set, SIGTERM); pthread_sigmask(SIG_BLOCK, &set, NULL); while(1) {sleep(1); }} static void sigset_print(sigset_t *set){ int i; for (i = 1; i <= SIGSYS; i++) {if (sigismember(set, i)) { printf('signal %d is in setn',i);} }} int main(int argc, char **argv){ int ret; sigset_t set; pthread_t pid; pthread_create(&pid, NULL, thread1, NULL); sleep(1); sigemptyset(&set); sigaddset(&set, SIGINT); pthread_sigmask(SIG_BLOCK, &set, NULL); ret = fork(); if (ret == 0) {//childpthread_sigmask(SIG_BLOCK, NULL, &set);sigset_print(&set); while(1) { sleep(1);} }else if (ret > 0) {//parentwhile(1) { sleep(1);} }else{perror('');abort(); } }

結論:只有在主線程里設置的掩碼才被子進程繼承了。這里面的原因在于linux里的fork只是復制了調用fork()的那個線程,因此在子進程里只有父進程的主線程被拷貝了,當然信號掩碼就是父進程的主線程的信號掩碼的復制了。再次驗證證明,如果是在thread1里調用fork,那么子進程的信號掩碼就會是thread1的拷貝了。

2.3、sigwait 與多線程

sigwait函數:sigwait等一個或者多個指定信號發生。

它所做的工作只有兩個:

第一,監聽被阻塞的信號;

第二,如果所監聽的信號產生了,則將其從未決隊列中移出來。sigwait并不改變信號掩碼的阻塞與非阻塞狀態。

在POSIX標準中,當進程收到信號時,如果是多線程的情況,我們是無法確定是哪一個線程處理這個信號。而sigwait是從進程中pending的信號中,取走指定的信號。這樣的話,如果要確保sigwait這個線程收到該信號,那么所有線程含主線程以及這個sigwait線程則必須block住這個信號,因為如果自己不阻塞就沒有未決狀態(阻塞狀態)信號,別的所有線程不阻塞就有可能當信號過來時,被其他的線程處理掉。

PS:

在多線程代碼中,總是使用sigwait或者sigwaitinfo或者sigtimedwait等函數來處理信號。而不是signal或者sigaction等函數。因為在一個線程中調用signal或者sigaction等函數會改變所以線程中的信號處理函數,而不是僅僅改變調用signal/sigaction的那個線程的信號處理函數。

2.4、多進程下的信號

多進程下鍵盤觸發的信號會同時發送到當前進程組的所有進程。如果一個程序在執行時 fork 了多個子進程,那么按鍵觸發的信號將會被這個程序的所有進程收到。

但是與多線程不一樣,多進程下的信號掩碼和信號處理函數是獨立的。每個進程都可以選擇處理或者不處理,也可以設置自己的信號掩碼。

#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <signal.h>int main(int argc, char **argv){ pid_t pid = fork(); signal(SIGCHLD, SIG_IGN); if (pid < 0)printf('error forkn'); else if (pid == 0) {signal(SIGINT, SIG_IGN); // 忽略 SIGINT,這樣 ctrl+c 后子進程能活下來; 不設置的話,收到信號將退出printf('child gid = %ldn', getpgid(getpid()));do{ sleep(1);} while (1); } else {printf('parent gid = %ldn', getpgid(getpid()));do{ sleep(1);} while (1); } return 0;}

淺談Linux信號機制

如上圖,可以看到,收到SIGINT 后父進程退出,子進程因為設置了忽略 SIGINT 所以子進程沒有受到影響。

三、apis3.1、信號發生函數

1.kill(pid_t pid, int signum);

2.int sigqueue(pid_t pid, int sig, const union sigval value);

3.pthread_kill(pthread_t tid, int signum);

4.raise(int signum);// 發送信號到自己

5.void alarm(void);

6.void abort(void);

7.int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);

PS:

sigqueue()比kill()傳遞了更多的附加信息,但sigqueue()只能向一個進程發送信號,而不能發送信號給一個進程組。如果signo=0,將會執行錯誤檢查,但實際上不發送任何信號,0值信號可用于檢查pid的有效性以及當前進程是否有權限向目標進程發送信號。

3.2、信號處理函數

1.signal(int signum, void (*handler)(int signum))

2.sigaction(int signum, struct sigaction* newact, sigaction* oldact)

sigaction act;act.sa_handler = handler;act.sa_flags = SA_SIGINFO;// 注冊信號的處理函數sigaction(SIGINT, act, NULL);3.3、信號掩碼函數

1.sigprocmask(int how, struct sigaction* set,struct sigaction* oldset)

2.pthread_sigmask(int how, struct sigaction* set,struct sigaction* oldset)

sigprocmask用于設置進程的信號掩碼,pthread_sigmask用于設置線程的信號掩碼,二者參數相同。第一個參數有SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK。

3.4、信號集合變量

sigset_t set

sigemptyset(&set) //清空阻塞信號集合變量

sigfillset(&set)  //添加所有的信號到阻塞集合變量里

sigaddset(&set,SIGINT) //添加單一信號到阻塞信號集合變量

sigdelset(&set,SIGINT) //從阻塞信號集合變量中刪除單一信號

sigismember(&set,int signum) //測試信號signum是否包含在信號集合set中,如果包含返回1,不包含返回0,出錯返回-1。錯誤代碼也只有一個EINVAL,表示signum不是有效的信號代碼。

3.5、信號屏蔽函數

1.int sigpending(sigset_t *set); // 返回阻塞的信號集

2.int sigsuspend(const sigset_t *mask);

sigsuspend表示臨時將信號屏蔽字設為mask,并掛起進程直到有信號產生(非屏蔽信號才能喚醒或終止進程),如果信號處理函數返回,那么siguspend將恢復之前的信號屏蔽字(temporarily)

假設sisuspend阻塞進程時產生了信號A,且A不是mask內的屏蔽信號,那么A的信號處理函數有兩種情形,

一:直接終止進程,此時進程都不存在了,那么sigsuspend當然無須返回了(不存在進程了sigsuspend也不存在了,函數棧嘛);

二:如果信號A的處理函數返回,那么信號屏蔽字恢復到sigsuspend之前的(sigsuspend調用時將信號屏蔽字設為mask,所以要恢復到sigsuspend調用之前的),然后sigsuspend返回-1并將error置為EINTR.

以上就是淺談Linux信號機制的詳細內容,更多關于Linux信號機制的資料請關注好吧啦網其它相關文章!

標簽: Linux系統
相關文章:
主站蜘蛛池模板: 鲁一鲁影院| 国产一区成人 | 婷婷桃色网 | 亚洲毛片在线观看 | 视频一区二区三区中文字幕 | 综合婷婷 | 亚洲一级黄色 | 日韩在线视频免费看 | 能在线观看的黄色网址 | 成人在线免费视频观看 | 91精品综合久久久久久五月天 | 国产日韩成人 | 91精品国产综合久久福利软件 | 午夜影院黄色 | 日韩大片播放器 | 久久综合九色综合欧美狠狠 | 色久视频 | 欧美一区二区三区 | 99精品一区二区三区 | 操操操干干干 | 亚洲欧美aa | 久久99热精品免费观看牛牛 | 视频一区在线播放 | 范冰冰一级做a爰片久久毛片 | 一级片观看 | 一级片免费视频 | 国产成人61精品免费看片 | 国产伦精品一区二区三区照片91 | 狠狠艹| 国产免费观看一区二区三区 | www.国产精品 | 久草免费福利 | 99精品不卡 | 99精品国产一区二区三区 | www.久久 | 中文字幕一区二区三区免费视频 | 精品久久一区二区三区 | 国产99页 | 久久av网| 五月综合久久 | 一区二区三区四区在线 | 欧美在线一区二区三区 | 情趣视频在线免费观看 | 一区二区三区国产精品 | 成人在线免费看 | 欧美一级精品 | 国产精品一区三区 | 中文字幕日韩久久 | 91久久精品国产91久久性色tv | 免费毛片a线观看 | 日韩精品视频在线观看一区二区 | 国产精品99久久久久久久久久久久 | 久久久99久久 | 亚洲高清免费视频 | 久久久网页 | 日韩中文一区二区三区 | 日韩欧美国产成人一区二区 | 午夜日韩 | 久久精品中文 | 亚洲精品视频在线 | 国产精选一区二区三区 | 九九99九九精彩46 | 国产精品自产拍在线观看桃花 | 国产精品片aa在线观看 | 国产色网站 | 北条麻妃一区二区在线 | 欧美啪啪一区二区 | 曰本人一级毛片免费完整视频 | 国产一级纯肉体一级毛片 | 日韩国产欧美视频 | 玖玖国产精品视频 | 国产又色又爽又黄 | 国产欧美久久久久久 | 久久亚洲美女 | 亚洲人人艹 | 亚洲一区二区精品视频 | 毛片网子 | av不卡在线播放 | 欧洲精品一区 | 欧美大片黄 | 91免费观看视频 | 日韩一区二区三区在线观看 | 日韩视频在线播放 | 波多野结衣一区二区三区中文字幕 | 亚洲专区欧美 | 好姑娘影视在线观看高清 | 欧美激情第二页 | 黄网站涩免费蜜桃网站 | 日本一二三区在线 | 夜久久 | 四虎影院入口 | 久国久产久精永久网页 | 国产精品久久精品 | 国产男女爽爽爽免费视频 | 亚洲视频在线播放 | 日韩在线中出 | 黄色毛片在线看 | 欧美精品一区二区三区在线播放 | 中文字幕免费视频观看 | 国产成人精品免高潮在线观看 | a一级片在线观看 | 国产精品美女久久久 | 一区二区三区国产 | 四虎永久免费影院 | 日韩和的一区二在线 | 久久久久国产精品免费免费搜索 | 日韩在线精品强乱中文字幕 | 无码少妇一区二区三区 | 久久成| 国产精品日韩在线 | 中文字幕亚洲二区 | 成人1区2区 | 狠狠综合久久av一区二区小说 | 色婷婷国产精品久久包臀 | 亚洲高清电影 | 操操操av | 成人欧美一区二区三区在线播放 | 欧美精品片 | 五月色综合 | 特级丰满少妇一级aaaa爱毛片 | 一区二区三区在线 | 欧 | 欧美一二区 | 欧美精品一区二区三区免费视频 | 成人午夜在线观看 | 久久二| 精品国产一区二区三区日日嗨 | 久热精品视频 | 久久久国产精品入口麻豆 | 亚州精品天堂中文字幕 | 在线看www | 91精品免费| 亚洲少妇视频 | 亚洲视频在线一区 | 在线观看国精产品二区1819 | 国产成人高清 | 日韩欧美在线观看一区 | 一区二区三区四区精品 | 91精品综合久久久久久五月天 | 天天操网 | 人人玩人人添人人澡97 | 亚洲精品成人 | 精品一区二区av | 午夜男人的天堂 | 91人人| 日韩中文字幕免费在线播放 | 中文字幕日韩在线视频 | 日韩精品无码一区二区三区 | 亚洲wu码| www.成人| 天天天天天天天天操 | 在线精品一区 | 国产精品久久免费看 | 91福利网址| 黄色精品 | 亚洲第一精品在线 | 99精品国产高清一区二区麻豆 | 91精品在线播放 | 欧美 日韩 国产 一区 | 亚洲国产精品一区二区三区 | 亚洲精品福利网站 | 亚洲精品不卡 | 中国大陆高清aⅴ毛片 | 激情欧美一区二区三区中文字幕 | 欧美日韩伊人 | av在线一区二区三区 | 神马香蕉久久 | 欧美大成色www永久网站婷 | 亚洲视频在线观看视频 | 91成人免费在线视频 | 天堂久久久久久 | 久久久久一区二区三区 | 久久这里只有精品首页 | 欧美综合激情 | 久久久久久免费 | 久久综合久久久 | 99免费视频 | 人人澡人人射 | 久久久精品综合 | 波多野结衣 一区二区 | 国产视频精品在线 | 偷派自拍 | 久久久久久亚洲精品 | 欧美日韩国产欧美 | 99亚洲精品| 综合 欧美 亚洲日本 | 天天操网 | 日本视频中文字幕 | 久久久久久久久综合 | 天天摸天天操 | 免费看黄色大片 | 91精品福利| 国产一区二区久久久 | 婷婷在线视频 | 久久性| 亚洲成年片 | 国产亚洲成av人片在线观看桃 | 欧美日本在线观看 | 伊人久久综合 | www夜夜操 | 国产中文视频 | 懂色av一区二区三区在线播放 | 国产三级黄色毛片 | 久久久久国产精品 | 女人夜夜春高潮爽av片 | www.国产.com | 在线成人www免费观看视频 | 成人欧美一区二区三区在线播放 | 精品毛片 | 国产精品久久久久久久久污网站 | 欧美日韩在线免费观看 | 欧美日韩在线二区 | 黄色福利 | 日韩在线观看高清 | 成人毛片在线观看视频 | 亚洲va中文字幕 | 一区二区av | 日比视频网站 | 成人在线播放 | 亚洲欧美日韩国产综合 | 久草免费福利 | 精品毛片 | 欧美日韩精品在线观看 | 国产情侣在线视频 | 日本综合色 | 91国内精品久久 | 热久久这里只有精品 | 激情一区二区 | 狠狠久久综合 | 欧美一区二区精品 | 久久精品免费看 | 天堂va | 久草中文在线 | 国产精品成人3p一区二区三区 | 国产精品日韩在线观看 | 国产精品久久免费看 | 国产精品国产精品国产专区不蜜 | 色综合88| 精品久久影院 | 成人免费精品视频 | 99精品久久久国产一区二区三 | 黄色成人在线观看视频 | 中文字幕一区二区三区不卡 | 日韩精品1区 | 精品一二三区在线观看 | 欧美一区不卡 | 免费一级毛片 | 日韩午夜 | 国产中文字幕在线 | 成人在线网址 | 日韩国产欧美一区 | 国产精品无码永久免费888 | 色在线免费视频 | 欧美久久久久久久久久久久 | 国产精品片aa在线观看 | 九色91九色porny永久 | 91精品国产综合久久久久久漫画 | 欧美视频在线一区 | 日韩免费一区 | www.色在线| 欧美视频三区 | 国产在线精品一区 | www日批 | h视频在线免费观看 | 国产精品一区免费在线观看 | 欧美日韩亚洲国产 | 91中文在线| 高清免费av| 中文字幕_第2页_高清免费在线 | 亚洲国产精品99久久久久久久久 | 精品无码久久久久久国产 | 成人观看免费视频 | 欧美日韩精品在线观看 | 超碰人人射| 岛国a视频 | 亚洲精品一区在线观看 | 久久久精品国产 | 国产婷婷精品av在线 | 国产视频亚洲 | 新91在线| 精品少妇一区二区 | 少妇激烈床戏视频 | 日韩一级免费在线观看 | 综合伊人 | 99精品欧美一区二区三区综合在线 | www.99 | www视频在线观看 | 精品久久久久久久 | 日韩在线观看精品 | 国产精品一区二区久久久 | 成人国产精品视频 | 夜久久| 欧美激情一区二区三区在线视频 | 日韩一区二区三区在线观看 | 激情在线观看视频 | 精品国产一区二区三区高潮视 | 韩日一区 | 久草视频在线播放 | 日韩午夜av | 日韩一区二区三区av | 性培育学校羞耻椅子调教h 欧美精品网站 | 国产精品美女久久久久久久久久久 | 日韩在线免费观看网站 | 一级片在线观看 | 在线精品亚洲 | 国产精品日韩三级 | 日韩高清黄色 | 精品欧美一区二区在线观看 | 欧美日韩不卡合集视频 | 亚洲视频在线观看免费 | 日韩在线观看一区 | 人人人人人你人人人人人 | 99国内精品久久久久久久 | 亚洲综合一区二区 | 久久伊人av | 成人免费一区二区三区视频网站 | 人人澡人人射 | 日韩成人免费 | 青青草久久 | 国产精品27页 | 操操操操操操操 | 亚洲不卡| 九一精品 | 日韩av一区二区三区四区 | 日韩特级 | 国产精品美女久久久久久久久久久 | 凹凸日日摸日日碰夜夜 | 欲色av | 91精品国产欧美一区二区成人 | 亚洲欧美激情精品一区二区 | 欧美xxxxxx视频 | 久久精品店 | 欧美欧美欧美 | 成人在线观看免费 | 在线精品国产 | 国产日韩精品在线观看 | 亚洲人成人一区二区在线观看 | 九九九色 | 欧美日韩一区在线观看 | 在线观看成人小视频 | 国产一级视频 | 国产在线1 | 欧美日本免费 | 91视频在线看 | 午夜艹| 欧美综合一区二区三区 | www.久草 | 国产精品日韩欧美一区二区三区 | 亚洲免费观看 | 久久久精品电影 | 天天干在线影院 | 欧洲精品一区二区 | 超级乱淫片国语对白免费视频 | 羞羞视频免费观看 | 亚洲欧美在线免费观看 | 国产精品久久久久久久久久免费看 | 国产一区二区电影 | 操老逼| 久久久久久av | 欧美精品一区二区三区蜜桃视频 | h片在线| 免费国产在线视频 | 日韩中文字幕 | 五月综合久久 | 亚洲天堂中文字幕 | 国产精品永久免费自在线观看 | 亚洲欧洲久久 | 亚洲电影在线观看 | hd国产人妖ts另类视频 | 国产女人高潮视频在线观看 | 视频一区 日韩 | 国产 在线 | 日韩 | 国产一区二区资源 | 91精品视频在线播放 | 国产最好的精华液网站 | www.日韩.com| 日韩高清黄色 | 在线观看免费黄色 | 久久精品一 | 成人亚洲网站 | 99国产精品99久久久久久 | 欧美成人高清视频 | 免费亚洲一区二区 | av在线免费观看网站 | 精品久久久久久久久久久久久久 | 亚州成人 | 国产精品无码久久久久 | 欧美一区二区三区在线 | 久久精品一区二区三区四区 | 久久久久久久9 | 免费一区二区三区 | 成人av片在线观看 | 欧美一区二区三区在线看 | 久久久91| 免费成人av在线 | 色综合色综合网色综合 | 91在线导航| 日本色站 | 日韩成人在线视频 | 久久久一 | 成人黄色在线视频 | 久草免费福利 | 国产在线精品一区二区三区 | 亚洲视频久久久 | 午夜一区二区三区 | 国产精品精品久久久 | 在线视频一区二区三区 | 红桃成人少妇网站 | 青青久久久 | 亚洲视频区 | 国外成人在线视频网站 | 狠狠操操| 香蕉视频在线看 | 国产三区在线视频 | 亚洲 中文 欧美 日韩在线观看 | 久草福利资源 | 日韩精品在线观看视频 | av一区在线观看 | 一级大片免费观看 | 在线91 | 日本欧美久久久久免费播放网 | 波多野结衣 一区二区三区 精品精品久久 | 免费黄色片在线观看 | 免费的黄色片子 | 91精品久久久久久久久久 | 欧美视频一二 | 香蕉视频成人在线观看 | 成人国产免费视频 | 国产探花在线精品一区二区 | 久久91 | 国产在线观看高清 | 一区二区不卡视频 | 欧美精品一区二区久久 | 亚洲激情一区 | 一级毛片在线播放 | 亚洲欧美v国产一区二区 | 精品入口麻豆88视频 | 中文字幕日韩一区二区不卡 | 欧美一级毛片日韩一级 | 天堂在线网 | 不卡一区二区三区四区 | 国产aaa大片 | 日韩精品一区二区三区第95 | 成人在线免费观看 | 日韩亚洲 | 亚洲精品久久久 | 成人免费视频观看视频 | 久久成人在线 | 精品视频成人 | 国产色视频在线观看免费 | 毛片免费观看视频 | 黄色av网站在线观看 | 婷婷成人在线 | 久久久成人精品 | 亚洲高清视频一区 | 欧美一区二区三区在线 | 美女超碰在线 | 欧美精品一区二区三区在线 | 超碰人人操 | 免费在线一区二区三区 | yiren22成人网| 一区二区久久 | 久草视频在线播放 | 国产精品亚洲天堂 | 欧美日韩福利视频 | 婷婷国产在线观看 | 亚洲一区中文 | 天天色影视综合 | 欧美日韩精品免费观看视频 | 欧美日韩电影一区二区 | 欧美 日韩 国产 成人 在线 | 欧美乱轮 | 国产中文视频 | 久久a国产 | 久热av在线 | 久草精品在线观看 | 日日操操 | 欧美日韩在线一区二区三区 | 免费无遮挡www小视频 | 国产美女在线播放 | 久久精品成人 | 在线欧美亚洲 | 丁香久久 | 在线观看免费的av | 一区二区日韩视频 | 国产日韩一区二区三区 | 亚洲精品一区中文字幕乱码 | 国产成人午夜视频 | 久久国语| 高清一区二区三区 | 精品久久久久久久久久久下田 | 精品一二区 | 伊人超碰在线 | 在线视频a| 欧美一区二区在线视频 | 国产一区二区三区在线免费 | 丰满少妇久久久久久久 | 久久99这里只有精品 | 日韩在线高清视频 | h片在线免费观看 | 九九精品视频在线 | 色综合激情 | av在线毛片 | 凹凸日日摸日日碰夜夜 | 国产精品91网站 | 伊人爽| 91久久久久久久久久久久久久久久 | 97精品国产97久久久久久粉红 | 中文字幕在线亚洲 | 99精品全国免费观看视频软件 | 三级视频在线 | 欧美一区二区三区精品 | 亚洲狠狠爱 | 国产精品亚洲成人 | а天堂中文官网 | 亚洲综合视频一区 | 亚洲精选久久 | 欧美精品欧美极品欧美激情 | 亚洲高清一区二区三区 | 中文字幕在线免费 | 中文无码久久精品 | 欧洲亚洲精品久久久久 | 亚洲欧美一区二区三区在线 | 久久97视频 | 日韩精品不卡 | 国产亚洲网站 | 日本福利网站 | 国产精品久久久久久久久久久久冷 | 九九在线视频 | 欧美国产视频 | 日韩午夜av | 97超碰在线免费 | 久久精选视频 | 日韩小视频网站 | 成人在线观看免费 | 亚欧洲精品视频在线观看 | 午夜视频在线 | 在线观看免费av网 | 日日操狠狠操 | 国产精品久久电影观看 | 99re6在线 | 欧美a级在线观看 | 国产乱码精品一区二区三区爽爽爽 | 精品久久网 | 日韩人体在线 | 91亚洲精品视频 | 99re在线播放视频 | 国厂黄色片 | 中文字幕 国产精品 | 国产精品久久久久久久久久久久久久久久 | 亚洲国产精品99久久久久久久久 | 精品九九九 | 资源av | 99re视频在线观看 | 亚洲在线视频 | 色天天综合久久久久综合片 | 精品亚洲国产成av人片传媒 | 欧美精品一区二区三区中文字幕 | 免费无遮挡www小视频 | 午夜免费小视频 | 日韩视频中文 | 亚洲在线免费观看 | 欧美日韩在线播放 | 国产成人精品免高潮在线观看 | 丁香五月网久久综合 | 九九热这里 | 丝袜久久 | 欧美a级成人淫片免费看 | 精品国产一区二区三区成人影院 | 亚洲综合精品 | 亚洲一区二区中文字幕 | 国产欧美一区二区三区国产幕精品 | www.一区二区| 午夜视频一区 | 中文字幕亚洲精品 | 亚洲国产欧美91 | 麻豆免费短视频 | 天天天干夜夜夜操 | 中文字幕亚洲二区 | 婷婷免费在线观看 | 一区视频网站 | 日韩在线免费 | 91精品啪啪 | 91色乱码一区二区三区 | 欧美一区久久 | 特级淫片裸体免费看 | 日本午夜精品 | 久久精品a级毛片 | 国产一区免费在线观看 | 日韩精品小视频 | 亚洲一区二区三区 | 五月婷婷天 | 日日摸天天爽天天爽视频 | 91精品国产色综合久久 | 国产精品久久综合 | 国产午夜精品一区二区 | 日本久久精品一区二区 | 久久国产欧美日韩精品 | 久热中文字幕 | 久久久久久久久久穴 | 精品国产乱码久久久久久久软件 | 亚洲精品乱码久久久久久国产主播 | 做视频免费观看网站 | 亚洲国产精品久久久久久女王 | www国产亚洲精品久久网站 | 亚洲高清一区二区三区 | 欧美色v| 福利视频一区二区三区 | 一区二区视频 | 性高湖久久久久久久久aaaaa | 亚洲欧美另类久久久精品2019 | 色999视频 | 久久99国产精品久久99果冻传媒 | 国产精品一卡二卡三卡 | 亚洲高清在线观看 | 一级黄色录像免费观看 |