Linux进程间通信
管道、消息队列、共享内存、套接字、信号量
共享内存
共享内存是操作系统将进程之间共享的数据内存安排为同一块物理内存段,需要使用锁保证数据的一致性
- 创建/获取共享内存(shmget)
- 将共享内存链接到当前进程的地址空间(shmat)
- 通过指针范文共享内训
- 将共享内存从当前进程中分离(shmdt)
- 删除共享内存(shmctl)
kill 相关命令
[cxl@localhost ~]$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) 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) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 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
-
kill -p 进程号:默认发送SIGTERM(15)给信号量,告诉进程需要自己关闭推出运行
进程接受到该信号后可能会发生一下几种情况
- 程序立刻停止
- 当程序释放相应资源后再停止
- 程序仍然再继续执行,多半是程序正在等待I/O,SIGTREM被阻塞了
-
kill -9 -p 进程号:嘎松SIGKILL(9)给信号量,告诉进程你被终结了,立即退出(无条件终止);
kill -9没有给进程机会做善后工作,包括:
- 关闭socket链接
- 清零临时文件
- 将自己将要被削=销毁的消息通知给子进程
- 重置自己的终止状态
-
Ctrl+c 相当于kill -2(SIGINT),Terminal interrupt,中断程序;
-
通常应该先发送15,等一下若没效果,发送2,做不行发送1,再不行,就是程序太烂