通讯架构学习-nginx-(三) 一些linux知识

编译c程序:gcc
gcc -o 文件名 文件

终端与进程的关系:
1)终端与bash进程 
pts:虚拟终端,每连接一个虚拟终端到Ubuntu,就会出现一个bash进程(shell壳) 黑窗口, 用于解释用户输入的命令
2)终端上的开启进程:
随着终端退出, 终端上的进程也就退出了。
进程关系进一步分析:
每个进程还属于一个进程组, 一个或者多个进程的集合, 每个进程组有一个唯一的进程组ID
可以调用系统函数来创建进程组, 加入进程组
“会话”session :包含一个或多个进程组
一般,只要不进行特殊系统函数调用, 一个bash上运行的所有程序属于一个会话 session leader就是这个bash

// ps -eo pid,ppid,sid,tty,pgrp,comm | grep -E 'bash|PID|nginx'

如果xshell要断开 系统会发送信号(终端断开信号) 给session leader, 也就是这个bash 
bash收到sighup信号后, 终端会把这个信号发送个所有进程 缺省动作就是退出。

strace工具的使用
linux下调试分析诊断工具,可以跟踪程序执行时进程的系统调用以及所收到的信号
跟踪你的测试进程:sudo strace -e trace=signal -p 进程ID

终端关闭时如何让进程不退出: 
拦截信号:signal(SIGHUB, SIG_IGN); sig_ign:要求忽略信号
bash进程 和测试程序不在一个session中:setsid()(进程组组长调用session是无效的)
应使用如下写法:
        pid_t pid;
        pid = fork() # 子进程从fork之后开始执行
        if (pid <0)
            printf("error");
        else if (pid == 0)
            setsid()
            你的程序
直接用setsid() ./nginx 这样启动的程序不属于任何bash
nohub ./nginx  这样就不会在屏幕上输出, 会重定向到nohub.out中

后台运行:执行程序的同时, 终端可以干其他事;
fg:切换到前台
bg:切换到后台    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值