Colderleo's blog Colderleo's blog
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)

Colder Leo

热爱代码的打工人
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)
  • 常见程序性能开销cost、latency延迟耗时的经验值
  • 面试常见问题
  • 静态链接-动态链接-elf详解-elfloader
  • 动态库和静态库的依赖问题
  • glibc和ld的编译调试-为某程序单独设置ld
  • dl_iterate_phdr遍历linkmap头、获取so加载地址
  • shell、bash语法和脚本模板
  • so文件查找路径
  • 逻辑地址-线性地址or虚拟地址-物理地址
  • 通过ELF读取当前进程的符号表并获取符号的版本信息
  • 虚拟内存,cache,TLB,页表
  • 用户内存空间分布和mmap
  • numa网卡绑定
  • 隔核绑核、服务器优化
  • popen底层原理和仿照实现-execl
  • tmux用法
  • ASLR机制
  • 程序后台运行、恢复前台nohup
    • nohup+&后台运行
    • nohup+&后台运行时的程序输出保存
    • 前台程序转后台,Ctrl+Z暂停程序运行,以及后台程序恢复前台运行
  • 大页内存huge_page
  • 用perf查看page-fault
  • Bash设置显示全部路径
  • 查看socket fd状态,设置nonblock
  • cout输出到屏幕的过程
  • 多进程写同一文件-write原子性-log日志
  • vim用法
  • epoll用法
  • signal信号、软中断、硬中断、alarm
  • 内核模块
  • 读写锁之pthread_rwlock和内核rwlock自旋读写锁
  • systemtap
  • xargs、awk用法
  • openssl libssl.so.10.so缺失问题
  • netstat用法
  • fork函数
  • tcp延迟确认ack
  • 90.centos7上一次std-string编译错误定位
  • docker用法
  • find用法
  • dmesg
  • gcc编译用法
  • avx-sse切换惩罚
  • Centos7防火墙
  • chmod用法
  • kernel-devel安装版本
  • Linux-Centos7系统安装、网络设置、常见报错
  • linux下g++编译c++文件
  • MegaCli 安装及使用
  • mysql
  • mysql忘记密码修改方法
  • set用法
  • crontab
  • ssh传文件scp
  • ssh连接
  • tcpdump、tshark、tcpreplay用法
  • ubantu root登录以及创建新用户
  • ubuntu安装g++和gdb
  • uClibc编译失败解决方法
  • win10安装WSL open-ssh
  • yum升级git
  • 比较so文件版本-md5sum
  • 查看磁盘信息
  • 合并两个硬盘,挂载到一个文件夹下
  • 软件安装目录usr-local-src
  • 下载centos历史版本
  • sh脚本转可执行文件、加密
  • Linux
gaoliu
2022-03-30
目录
nohup+&后台运行
nohup+&后台运行时的程序输出保存
前台程序转后台,Ctrl+Z暂停程序运行,以及后台程序恢复前台运行

程序后台运行、恢复前台nohup

# nohup+&后台运行

https://blog.csdn.net/hl449006540/article/details/80216061

  • 现在我们要执行一个程序ping 127.0.0.1 也可以是./hello_world 或者./test

  • 执行ping 127.0.0.1 & 程序会后台运行,但是继续输出到shell终端, Ctrl+C也不能给程序发送信号。当shell终端关掉时,程序收到 SIGHUP信号,就停止运行了。

  • 执行nohup ping 127.0.0.1 程序会前台运行,生成nohup.out文件,但是文件里啥也没有。关闭shell程序会继续运行。 nohup的作用是就是忽略SIGHUP信号,把标准输入重定向到'/dev/null', 把标准输出重定向到'nohup.out'

  • 执行nohup ping 127.0.0.1 & 程序会后台运行,关闭shell也没事,并且会输出结果到当前目录的nohup.out。这个就是正确的程序后台运行方式。

# nohup+&后台运行时的程序输出保存

  • 执行nohup ping 127.0.0.1 &, 输出保存在当前目录的nohup

  • 执行nohup ping 127.0.0.1 >ping.log 2>&1 &, 输出保存至ping.log。 2>&1表示将标准错误重定向到到标准输出。 注意这里2>&1要在后面

  • 执行nohup ping 127.0.0.1 >/dev/null 2>&1 &, 输出不保存。 就是将上面的ping.log改成ping.log。 /dev/null是linux上一个黑洞文件,相当于空。

# 前台程序转后台,Ctrl+Z暂停程序运行,以及后台程序恢复前台运行

SINKILL停止信号和SIGSTOP暂停信号是不能被捕捉和忽略的。

Ctrl+Z 向shell前台中正在运行的程序发送'SIGSTOP'暂停信号,程序将暂停运行,并被放到后台。

kill -SIGCONT pid 向程序发送继续运行的消息,程序会继续在后台运行;

编译并运行下面的程序 main.c:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <errno.h>

sighandler_t Signal(int signum, sighandler_t handler) {
    struct sigaction action, old_action;
    action.sa_handler = handler;
    sigemptyset(&action.sa_mask);
    action.sa_flags = SA_RESTART;

    if(sigaction(signum, &action, &old_action) < 0) {
        fprintf(stderr, "%s: %s\n", "sigaction error", strerror(errno));
        exit(0);
    }
    return old_action.sa_handler;
}

void signal_handler(int signum) {
    puts("received signal\n");
}


int main(int argc, char *argv[]) {
    // signal(SIGINT, signal_handler);
    Signal(SIGINT, signal_handler);

    while(1) {
        usleep(1000*1000);
        printf("sleep 1\n");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

编译程序: gcc main.c

按Ctrl+C(发送SIGINT信号), 程序输出received signal;

按Ctrl+Z(发送SIGSTOP信号), 程序被暂停并放到后台,但是没有死掉,还可以继续;

pgrep a.out 查看程序pid为32664;

kill -SIGCONT 32664 向程序发送继续运行的消息,程序会继续运行在后台;

jobs 查看后台运行的程序, a.out的job id为 1;

fg 1 将后台程序恢复到前台运行,此时再按Ctrl+C,程序仍输出received signal;

再按Ctrl+z,程序暂停运行并放入后台。

bg 1 将后台暂停的程序继续运行。

编辑 (opens new window)
上次更新: 2022/04/17, 09:13:05
ASLR机制
大页内存huge_page

← ASLR机制 大页内存huge_page→

最近更新
01
通过模板实现结构体成员拷贝-按成员名匹配
05-07
02
c++17通过模板获取类成员的个数
05-01
03
avx-sse切换惩罚
04-30
更多文章>

Related Issues not found

Please contact @colderleo to initialize the comment

Theme by Vdoing | Copyright © 2019-2025 Colder Leo | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×