当前位置: 首页 > news >正文

网站建设资讯版块如何做用户运营大气点的公司名字大全

网站建设资讯版块如何做用户运营,大气点的公司名字大全,福建省武夷山市城乡建设网站,哪家做网站好信号会打断系统调用#xff0c;慎用#xff0c;就是用的时候测一测。 下面是信号的基础测试 信号 信号#xff08;signal#xff09;机制是UNIX系统中最为古老的进程之间的通信机制。它用于在一个或多个进程之间传递异步信号。信号可以由各种异步事件产生#xff0c;例如…信号会打断系统调用慎用就是用的时候测一测。 下面是信号的基础测试 信号 信号signal机制是UNIX系统中最为古老的进程之间的通信机制。它用于在一个或多个进程之间传递异步信号。信号可以由各种异步事件产生例如键盘中断等。Shell也可以使用信号将作业控制命令传递给它的子进程。 Linux系统中定义了一系列的信号这些信号可以由内核产生也可以由系统中的其他进程产生只要这些进程有足够的权限。可以使用kill命令kill -l在机器上列出所有的信号如下所示 lkmaoubuntu:~$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN1 36) SIGRTMIN2 37) SIGRTMIN3 38) SIGRTMIN4 39) SIGRTMIN5 40) SIGRTMIN6 41) SIGRTMIN7 42) SIGRTMIN8 43) SIGRTMIN9 44) SIGRTMIN10 45) SIGRTMIN11 46) SIGRTMIN12 47) SIGRTMIN13 48) SIGRTMIN14 49) SIGRTMIN15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX lkmaoubuntu:~$进程可以屏蔽掉大多数的信号除了SIGSTOP和SIGKILL。SIGSTOP信号使一个正在运行的进程暂停而信号SIGKILL则使正在运行的进程退出。进程可以选择系统的默认方式处理信号也可以选择自己的方式处理产生的信号。信号之间不存在相对的优先权系统也无法处理同时产生的多个同种的信号也就是说进程不能分辨它收到的是1个或者是42个SIGCONT信号。 SIGCONT此作业控制信号送给需要继续运行的处于停止状态的进程。如果接收到此信号的进程处于停止状态则操作系统的默认动作是使该停止的进程继续运行否则默认动作是忽略此信号。 SIGEMT指示一个实现定义的硬件故障。 SIGFPE此信号表示一个算术运算异常例如除以0浮点溢出等。 SIGHUP如果终端界面检测到一个连接断开则将此信号送给与该终端相关的进程。 SIGILL此信号指示进程已执行一条非法硬件指令。 SIGINT当用户按中断键一般采用Delete或CtrlC时终端驱动程序产生这个信号并将信号送给前台进程组中的每一个进程。当一个进程在运行时失控特别是它正在屏幕上产生大量不需要的输出时常用此信号终止它。 SIGIO此信号指示一个异步IO事件。 SIGIOT这指示一个实现定义的硬件故障。 SIGPIPE如果在读进程时已终止写管道则产生此信号。 SIGQUIT当用户在终端上按退出键一般采用CtrlC时产生此信号并送至前台进程组中的所有进程。 SIGSEGV指示进程进行了一次无效的存储访问。 SIGSTOP这是一个作业控制信号它停止一个进程。 SIGSYS指示一个无效的系统调用。由于某种未知原因某个进程执行了一条系统调用命令但是调用命令所用的参数无效。 SIGTERM这是由kill命令发送的系统默认终止信号。 SIGTRAP指示一个实现定义的硬件故障。 SIGTSTP交互停止信号当用户在终端上按挂起键一般采用CtrlZ时终端驱动程序产生此信号。 SIGTTIN当一个后台进程组进程试图读其控制终端时终端驱动程序产生此信号。 SIGTTOU当一个后台进程组进程试图写其控制终端时产生此信号。 SIGURG此信号通知进程已经发生一个紧急情况。在网络连接上接到非规定波特率的数据时此信号可选择地产生。 SIGUSR1这是一个用户定义的信号可用于应用程序。 SIGUSR2这是一个用户定义的信号可用于应用程序。 信号截取函数signal() signal()函数用于截取系统的信号对此信号挂接用户自己的处理函数。其原型如下 NAMEsignal - ANSI C signal handlingSYNOPSIS#include signal.htypedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);signal()函数的原型说明此函数要求两个参数返回一个函数指针而该指针所指向的函数无返回值void。第1个参数signo是一个整型数第2个参数是函数指针它所指向的函数需要一个整型参数无返回值。用一般语言来描述就是要向信号处理程序传送一个整型参数而它却无返回值。当调用signal设置信号处理程序时第2个参数是指向该函数也就是信号处理程序的指针。signal的返回值指向以前信号处理程序的指针。 如下代码截取了系统的信号SIGSTOP和SIGKILL用命令kill杀死其是不可能的。 测试一尝试截获信号SIGSTOP和SIGKILL #include stdio.h #include sys/types.h #include sys/ipc.h #include sys/sem.h #include stdlib.h #include sys/shm.h #include string.h #include signal.h #include unistd.h#define DEBUG_INFO(format, ...) printf(%s:%d -- format \n, __func__, __LINE__,##__VA_ARGS__)typedef void (*sighandler)(int signo);static void sig_kill(int signo){DEBUG_INFO(signo %d\n, signo); }static void sig_stop(int signo){DEBUG_INFO(signo %d\n, signo); }int main(int argc, char **argv){sighandler ret;ret signal(SIGKILL, sig_kill);if(ret SIG_ERR){perror(signal sig_kill);DEBUG_INFO(signal SIGKILL error);//exit(-1);}ret signal(SIGSTOP, sig_stop);if(ret SIG_ERR){perror(signal sig_stop);//exit(-1);DEBUG_INFO(signal SIGSTOP error);}for(;;){sleep(1);}return 0; } 执行结果 signal sig_kill: Invalid argument main:28 -- signal SIGKILL error signal sig_stop: Invalid argument main:35 -- signal SIGSTOP error 结论这根本截获不了啊。 测试二捕获SIGINT捕获成功以后将SIGINT信号设置为默认处理方式 #include stdio.h #include sys/types.h #include sys/ipc.h #include sys/sem.h #include stdlib.h #include sys/shm.h #include string.h #include signal.h #include unistd.h#define DEBUG_INFO(format, ...) printf(%s:%d -- format \n, __func__, __LINE__,##__VA_ARGS__)typedef void (*sighandler)(int signo);static void sig_func(int signo){DEBUG_INFO(signo %d\n, signo);switch(signo) {case SIGKILL:DEBUG_INFO(SIGKILL);break;case SIGSTOP:DEBUG_INFO(SIGSTOP);break;case SIGINT:DEBUG_INFO(SIGINT);signal(SIGINT, SIG_DFL);default:break;} } int main(int argc, char **argv){sighandler ret;ret signal(SIGKILL, sig_func);if(ret SIG_ERR){perror(signal sig_kill);DEBUG_INFO(signal SIGKILL error);//exit(-1);}ret signal(SIGSTOP, sig_func);if(ret SIG_ERR){perror(signal sig_stop);//exit(-1);DEBUG_INFO(signal SIGSTOP error);}ret signal(SIGINT, sig_func);if(ret SIG_ERR){perror(signal sig_stop);//exit(-1);DEBUG_INFO(signal SIGSTOP error);}for(;;){sleep(1);}return 0; } 测试结果按两次CTRLC第一次进入sig_func函数第二次退出程序。 signal sig_kill: Invalid argument main:37 -- signal SIGKILL error signal sig_stop: Invalid argument main:44 -- signal SIGSTOP error ^Csig_func:16 -- signo 2sig_func:25 -- SIGINT kill函数和raise函数 NAMEkill - send signal to a processSYNOPSIS#include sys/types.h#include signal.hint kill(pid_t pid, int sig);NAMEraise - send a signal to the callerSYNOPSIS#include signal.hint raise(int sig);测试三kill函数和raise函数发送信号 #include stdio.h #include sys/types.h #include sys/ipc.h #include sys/sem.h #include stdlib.h #include sys/shm.h #include string.h #include signal.h #include unistd.h#define DEBUG_INFO(format, ...) printf(%s:%d -- format \n, __func__, __LINE__,##__VA_ARGS__)typedef void (*sighandler)(int signo);static void sig_func(int signo){static int count 0;DEBUG_INFO(signo %d\n, signo);switch(signo) {case SIGKILL:DEBUG_INFO(SIGKILL);break;case SIGSTOP:DEBUG_INFO(SIGSTOP);break;case SIGINT:count;DEBUG_INFO(SIGINT count %d,count);if(count 2){signal(SIGINT, SIG_DFL);}default:break;} } int main(int argc, char **argv){sighandler ret;ret signal(SIGKILL, sig_func);if(ret SIG_ERR){perror(signal sig_kill);DEBUG_INFO(signal SIGKILL error);//exit(-1);}ret signal(SIGSTOP, sig_func);if(ret SIG_ERR){perror(signal sig_stop);//exit(-1);DEBUG_INFO(signal SIGSTOP error);}ret signal(SIGINT, sig_func);if(ret SIG_ERR){perror(signal sig_stop);//exit(-1);DEBUG_INFO(signal SIGSTOP error);}raise(SIGINT);kill(getpid(),SIGINT);for(;;){sleep(1);}return 0; } 测试结果raise产生一次SIGINT信号kill产生一次SIGINT信号此时计数值count变成2信号处理函数恢复默认值最后CTRLC退出进程。 signal sig_kill: Invalid argument main:43 -- signal SIGKILL error signal sig_stop: Invalid argument main:50 -- signal SIGSTOP error sig_func:17 -- signo 2sig_func:27 -- SIGINT count 1 sig_func:17 -- signo 2sig_func:27 -- SIGINT count 2 ^C SIGCHLD信号 测试程序子进程退出时会自动向父进程发送信号 #include stdio.h #include sys/types.h #include sys/ipc.h #include sys/sem.h #include stdlib.h #include sys/shm.h #include string.h #include signal.h #include unistd.h#define DEBUG_INFO(format, ...) printf(%s:%d -- format \n, __func__, __LINE__,##__VA_ARGS__)typedef void (*sighandler)(int signo);static void sig_func(int signo){static int count 0;//DEBUG_INFO(signo %d\n, signo);switch(signo) {case SIGKILL:DEBUG_INFO(SIGKILL);break;case SIGSTOP:DEBUG_INFO(SIGSTOP);break;case SIGINT:count;DEBUG_INFO(SIGINT count %d,count);if(count 2){signal(SIGINT, SIG_DFL);}break;case SIGCHLD:DEBUG_INFO(%u get a SIGCHLD signal,getppid());break; default:DEBUG_INFO(unknow signo %d,signo);break;} } int main(int argc, char **argv){sighandler ret;ret signal(SIGCHLD, sig_func);if(ret SIG_ERR){perror(signal sig_kill);DEBUG_INFO(signal SIGKILL error);//exit(-1);}pid_t pid fork();if(pid 0){DEBUG_INFO(child running %u,getpid());DEBUG_INFO(send a SIGCHLD to %u,getppid());exit(0);}for(;;){sleep(1);}return 0; } 执行结果 main:54 -- child running 109007 main:55 -- send a SIGCHLD to 109006 sig_func:36 -- SIGABRT信号测试 #include stdio.h #include sys/types.h #include sys/ipc.h #include sys/sem.h #include stdlib.h #include sys/shm.h #include string.h #include signal.h #include unistd.h#define DEBUG_INFO(format, ...) printf(%s:%d -- format \n, __func__, __LINE__,##__VA_ARGS__)typedef void (*sighandler)(int signo);static void sig_func(int signo){static int count 0;switch(signo) {case SIGABRT:break;case SIGKILL:DEBUG_INFO(SIGKILL);break;case SIGSTOP:DEBUG_INFO(SIGSTOP);break;case SIGINT:count;DEBUG_INFO(SIGINT count %d,count);if(count 2){signal(SIGINT, SIG_DFL);}break;case SIGCHLD:DEBUG_INFO(%u get a SIGCHLD signal,getppid());break; default:DEBUG_INFO(unknow signo %d,signo);break;} } int main(int argc, char **argv){sighandler ret;ret signal(SIGABRT, sig_func);if(ret SIG_ERR){perror(signal);exit(-1);}DEBUG_INFO(send a SIGABRT signal by abort());abort();sleep(1);return 0; } 测试结果 main:52 -- send a SIGABRT signal by abort() ./test.sh: 行 10: 111335 已放弃 (核心已转储) ./_build_test_cpp_test/signal SIGCONT信号测试实验中父进程先睡眠子进程向父进程发送SIGCONT信号父进程退出睡眠继续执行然后退出程序。子进程变成孤儿进程最后由进程1接管 #include stdio.h #include sys/types.h #include sys/ipc.h #include sys/sem.h #include stdlib.h #include sys/shm.h #include string.h #include signal.h #include unistd.h#define DEBUG_INFO(format, ...) printf(%s:%d -- format \n, __func__, __LINE__,##__VA_ARGS__)typedef void (*sighandler)(int signo);static void sig_func(int signo){static int count 0;switch(signo) {case SIGABRT:break;case SIGKILL:DEBUG_INFO(SIGKILL);break;case SIGSTOP:DEBUG_INFO(SIGSTOP);break;case SIGINT:count;DEBUG_INFO(SIGINT count %d,count);if(count 2){signal(SIGINT, SIG_DFL);}break;case SIGCHLD:DEBUG_INFO(%u get a SIGCHLD signal,getppid());break; case SIGCONT:DEBUG_INFO(SIGCONT);break;default:DEBUG_INFO(unknow signo %d,signo);break;} } int main(int argc, char **argv){sighandler ret;ret signal(SIGCONT, sig_func);if(ret SIG_ERR){perror(signal);exit(-1);}if(fork() 0){DEBUG_INFO(%u send a SIGCONT signal,getppid());DEBUG_INFO(my parent is %u,getppid());kill(getppid(),SIGCONT);sleep(500);DEBUG_INFO(my parent is %u,getppid());DEBUG_INFO(bye bye);abort();}sleep(100);DEBUG_INFO(parent sleep is interrupt by signal SIGCONT);return 0; } 执行结果符合推到 main:58 -- 116350 send a SIGCONT signal main:59 -- my parent is 116350 sig_func:41 -- SIGCONT main:67 -- parent sleep is interrupt by signal SIGCONT lkmaoubuntu:/big/csi_driver/rty/01$ main:62 -- my parent is 1 main:63 -- bye bye 最后通过进程名字终止子进程的睡眠它继续运行后自行退出。  killall -SIGCONT signal SIGHUP信号 问如何产生一个SIGHUP信号 可以通过以下几种方式产生SIGHUP信号 1. 在终端中使用kill命令指定进程ID和信号类型 kill -SIGHUP 进程ID 2. 在终端中使用kill命令指定进程名称和信号类型 killall -SIGHUP 进程名称 3. 在程序中使用kill函数指定进程ID和信号类型 c kill(进程ID, SIGHUP); 4. 在程序中使用raise函数产生当前进程的SIGHUP信号 c raise(SIGHUP); 在什么情况下需要发送一个SIGHUP信号 SIGHUP信号通常用于重新加载配置文件或重新启动进程。以下是一些需要发送SIGHUP信号的情况 1. 当进程的配置文件发生更改时可以发送SIGHUP信号以重新加载配置文件。 2. 当进程需要重新启动时可以发送SIGHUP信号以通知进程重新启动。 3. 当需要重新初始化进程时可以发送SIGHUP信号以重新初始化进程。 4. 当需要重新读取进程的日志文件时可以发送SIGHUP信号以重新打开日志文件。 5. 当需要重新加载进程的插件或模块时可以发送SIGHUP信号以重新加载插件或模块。   测试代码 #include stdio.h #include sys/types.h #include sys/ipc.h #include sys/sem.h #include stdlib.h #include sys/shm.h #include string.h #include signal.h #include unistd.h#define DEBUG_INFO(format, ...) printf(%s:%d -- format \n, __func__, __LINE__,##__VA_ARGS__)typedef void (*sighandler)(int signo);static void sig_func(int signo){static int count 0;switch(signo) {case SIGABRT:break;case SIGKILL:DEBUG_INFO(SIGKILL);break;case SIGSTOP:DEBUG_INFO(SIGSTOP);break;case SIGINT:count;DEBUG_INFO(SIGINT count %d,count);if(count 2){signal(SIGINT, SIG_DFL);}break;case SIGCHLD:DEBUG_INFO(%u get a SIGCHLD signal,getppid());break; case SIGCONT:DEBUG_INFO(SIGCONT %u,getppid());break;case SIGHUP:DEBUG_INFO(SIGHUP %u,getpid());break;case SIGSYS:DEBUG_INFO(SIGSYS);break;case SIGTTOU:DEBUG_INFO(SIGTTOU);break;default:DEBUG_INFO(unknow signo %d,signo);break;} } int main(int argc, char **argv){sighandler ret;ret signal(SIGHUP,sig_func);if(ret SIG_ERR){perror(signal);exit(-1);}DEBUG_INFO(pid %u,ppid %u,getpid(),getppid());if(fork() 0){DEBUG_INFO(child %u,getpid());sleep(100);DEBUG_INFO(child %u,getpid());}sleep(100);DEBUG_INFO(parent sleep is interrupt by a signal);return 0; } 测试结果结果证明 1 SIGHUP信号可以被捕获  2 SIGHUP信号可以打断sleep睡眠。 3 父进程和子进程都收到了信号 SIGUSR1和SIGUSR2 #include stdio.h #include sys/types.h #include sys/ipc.h #include sys/sem.h #include stdlib.h #include sys/shm.h #include string.h #include signal.h #include unistd.h#define DEBUG_INFO(format, ...) printf(%s:%d -- format \n, __func__, __LINE__,##__VA_ARGS__)typedef void (*sighandler)(int signo);static void sig_func(int signo){static int count 0;switch(signo) {case SIGABRT:break;case SIGKILL:DEBUG_INFO(SIGKILL);break;case SIGSTOP:DEBUG_INFO(SIGSTOP);break;case SIGINT:count;DEBUG_INFO(SIGINT count %d,count);if(count 2){signal(SIGINT, SIG_DFL);}break;case SIGCHLD:DEBUG_INFO(%u get a SIGCHLD signal,getppid());break; case SIGCONT:DEBUG_INFO(SIGCONT %u,getppid());break;case SIGHUP:DEBUG_INFO(SIGHUP %u,getpid());break;case SIGSYS:DEBUG_INFO(SIGSYS);break;case SIGTTOU:DEBUG_INFO(SIGTTOU);break;case SIGUSR1:DEBUG_INFO(SIGUSR1 %u,getpid());break;case SIGUSR2:DEBUG_INFO(SIGUSR2 %u,getpid());break;default:DEBUG_INFO(unknow signo %d,signo);break;} } int main(int argc, char **argv){sighandler ret;ret signal(SIGHUP,sig_func);if(ret SIG_ERR){perror(signal);exit(-1);}ret signal(SIGUSR1,sig_func);if(ret SIG_ERR){perror(signal);exit(-1);}ret signal(SIGUSR2,sig_func);if(ret SIG_ERR){perror(signal);exit(-1);}DEBUG_INFO(pid %u,ppid %u,getpid(),getppid());if(fork() 0){DEBUG_INFO(child %u,getpid());kill(getppid(), SIGUSR1);kill(getpid(), SIGUSR2);sleep(100);DEBUG_INFO(child %u,getpid());}for(int i 0; i 10;i){sleep(100);DEBUG_INFO(parent sleep is interrupt by a signal);}return 0; } 执行结果  main:80 -- pid 126176,ppid 126084 main:82 -- child 126177 sig_func:56 -- SIGUSR2 126177 sig_func:53 -- SIGUSR1 126176 main:92 -- parent sleep is interrupt by a signal 小结
文章转载自:
http://www.morning.ygqhd.cn.gov.cn.ygqhd.cn
http://www.morning.dtrcl.cn.gov.cn.dtrcl.cn
http://www.morning.qwmsq.cn.gov.cn.qwmsq.cn
http://www.morning.tpxgm.cn.gov.cn.tpxgm.cn
http://www.morning.yqlrq.cn.gov.cn.yqlrq.cn
http://www.morning.gwgjl.cn.gov.cn.gwgjl.cn
http://www.morning.nqpxs.cn.gov.cn.nqpxs.cn
http://www.morning.bsbcp.cn.gov.cn.bsbcp.cn
http://www.morning.qnksk.cn.gov.cn.qnksk.cn
http://www.morning.qsy40.cn.gov.cn.qsy40.cn
http://www.morning.qlpyn.cn.gov.cn.qlpyn.cn
http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn
http://www.morning.dhyzr.cn.gov.cn.dhyzr.cn
http://www.morning.gcftl.cn.gov.cn.gcftl.cn
http://www.morning.cdygl.com.gov.cn.cdygl.com
http://www.morning.fplqh.cn.gov.cn.fplqh.cn
http://www.morning.krfpj.cn.gov.cn.krfpj.cn
http://www.morning.npbnc.cn.gov.cn.npbnc.cn
http://www.morning.hqrkq.cn.gov.cn.hqrkq.cn
http://www.morning.nrlsg.cn.gov.cn.nrlsg.cn
http://www.morning.kfjnx.cn.gov.cn.kfjnx.cn
http://www.morning.srcth.cn.gov.cn.srcth.cn
http://www.morning.gnjkn.cn.gov.cn.gnjkn.cn
http://www.morning.rrqgf.cn.gov.cn.rrqgf.cn
http://www.morning.tbnpn.cn.gov.cn.tbnpn.cn
http://www.morning.ptxwg.cn.gov.cn.ptxwg.cn
http://www.morning.mnkz.cn.gov.cn.mnkz.cn
http://www.morning.zlhzd.cn.gov.cn.zlhzd.cn
http://www.morning.knnhd.cn.gov.cn.knnhd.cn
http://www.morning.xptkl.cn.gov.cn.xptkl.cn
http://www.morning.qnbzs.cn.gov.cn.qnbzs.cn
http://www.morning.flfxb.cn.gov.cn.flfxb.cn
http://www.morning.pybqq.cn.gov.cn.pybqq.cn
http://www.morning.jjhng.cn.gov.cn.jjhng.cn
http://www.morning.rnwmp.cn.gov.cn.rnwmp.cn
http://www.morning.khlxd.cn.gov.cn.khlxd.cn
http://www.morning.mmosan.com.gov.cn.mmosan.com
http://www.morning.hrgxk.cn.gov.cn.hrgxk.cn
http://www.morning.dpbgw.cn.gov.cn.dpbgw.cn
http://www.morning.gsqw.cn.gov.cn.gsqw.cn
http://www.morning.bssjz.cn.gov.cn.bssjz.cn
http://www.morning.spkw.cn.gov.cn.spkw.cn
http://www.morning.tqjks.cn.gov.cn.tqjks.cn
http://www.morning.crhd.cn.gov.cn.crhd.cn
http://www.morning.enjoinfo.cn.gov.cn.enjoinfo.cn
http://www.morning.gtxrw.cn.gov.cn.gtxrw.cn
http://www.morning.nbrdx.cn.gov.cn.nbrdx.cn
http://www.morning.nmngq.cn.gov.cn.nmngq.cn
http://www.morning.ptqpd.cn.gov.cn.ptqpd.cn
http://www.morning.clfct.cn.gov.cn.clfct.cn
http://www.morning.rmyqj.cn.gov.cn.rmyqj.cn
http://www.morning.tnjkg.cn.gov.cn.tnjkg.cn
http://www.morning.lmdkn.cn.gov.cn.lmdkn.cn
http://www.morning.fdfsh.cn.gov.cn.fdfsh.cn
http://www.morning.dzdtj.cn.gov.cn.dzdtj.cn
http://www.morning.tqjks.cn.gov.cn.tqjks.cn
http://www.morning.mzhgf.cn.gov.cn.mzhgf.cn
http://www.morning.leyuhh.com.gov.cn.leyuhh.com
http://www.morning.qymqh.cn.gov.cn.qymqh.cn
http://www.morning.bnrff.cn.gov.cn.bnrff.cn
http://www.morning.ljbpk.cn.gov.cn.ljbpk.cn
http://www.morning.ryspp.cn.gov.cn.ryspp.cn
http://www.morning.wklyk.cn.gov.cn.wklyk.cn
http://www.morning.trwkz.cn.gov.cn.trwkz.cn
http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn
http://www.morning.lnbyk.cn.gov.cn.lnbyk.cn
http://www.morning.mlnby.cn.gov.cn.mlnby.cn
http://www.morning.prprz.cn.gov.cn.prprz.cn
http://www.morning.ycmpk.cn.gov.cn.ycmpk.cn
http://www.morning.gmjkn.cn.gov.cn.gmjkn.cn
http://www.morning.lbbrw.cn.gov.cn.lbbrw.cn
http://www.morning.hhqjf.cn.gov.cn.hhqjf.cn
http://www.morning.lchtb.cn.gov.cn.lchtb.cn
http://www.morning.27asw.cn.gov.cn.27asw.cn
http://www.morning.rlhh.cn.gov.cn.rlhh.cn
http://www.morning.pqwhk.cn.gov.cn.pqwhk.cn
http://www.morning.qwbls.cn.gov.cn.qwbls.cn
http://www.morning.yqqxj26.cn.gov.cn.yqqxj26.cn
http://www.morning.rbxsk.cn.gov.cn.rbxsk.cn
http://www.morning.nzkc.cn.gov.cn.nzkc.cn
http://www.tj-hxxt.cn/news/260557.html

相关文章:

  • 网页设计属于ui范围吗大连网络seo公司
  • 做网站购买服务器建设部网站刘赵云
  • 创建免费论坛的10个网站柳州做网站
  • 商丘网站建设的公司哪家好黑龙江省住房与城乡建设厅网站
  • 绥化网站开发公司营销模式都有哪些
  • 趣图在线生成网站源码xyz域名免费注册
  • 商会网站建设百度网站开发合同范本
  • 深圳华强北商城网站建设软件技术是学什么的
  • 江苏有哪些做网站建设的公司俄罗斯乌克兰局势最新消息
  • 网站建设价格单建筑网官网登录
  • 网站描述多个词怎么分隔店铺运营数据分析
  • 网站服务器维护方案wordpress+评论
  • 网站推广方法及特点网页制作首页代码模板
  • 中小企业为什么要建网站太原规划网站
  • 做ppt的素材网站网上北京网站制作公司
  • 西安定制网站大连网站运营
  • 莱阳做网站的遵义新蓝外国语学校网站建设
  • 云南省城乡建设厅网站标书制作标准
  • 专业设计网站wordpress 留言 插件
  • 企业名录网站 优帮云深圳建网站多少钱一年
  • 邯郸企业网站建设百度网站免费优化软件下载
  • 西安网站建设工程域名注册查询系统
  • 网站后台php开发教程百度游戏中心官网
  • 快站公众号建设工程合同法全文
  • 什么做网站统计好三个字公司名字
  • 教育wordpress模板下载温州谷歌优化公司
  • wordpress建站模版京东快递 网站建设特点
  • 买网站主机自己开发app要多少钱
  • 电商类网站开发项目书网站友情链接检测
  • 网站设计开发收费标准房屋装修设计网站