[Docker 调试进程] 首发于官方博客:https://nebula-graph.com.cn/posts/debug-nebula-graph-processes-docker/ 摘要:本文以 Nebula...Graph 进程为例,讲解如何不破坏原有容器的内容,也不用在其中安装任何的工具包前提下,像在本地一样来调试进程 需求 在开发或者测试过程中,我们经常会用到 vesoft-inc/nebula-docker-compose...其实调试容器内部的进程还有另外一种方式,不需要破坏原有容器的内容,也不用在其中安装任何的工具包就能像在本地一样来调试。 这种技术在 k8s 环境下其实已经挺常用,就是 sidecar 模式。...这样原容器中的进程和网络空间在调试容器中就能“一览无余”,而在调试容器中安装了你想要的一切顺手工具,接下来的舞台就是留于你发挥了。...总结 通过运行另外一个容器,并让其跟想要调试的容器共享 pid/network namespace 是我们能像本地调试的关键。
笔记:根据一个进程的名字或启动此进程的命令(连续的一部分即可)杀死进程 一、使用单条命令 ps -ef | grep 进程名/启动进程的命令 | grep -v grep | awk ‘{print $2...}’ | xargs kill -9 执行结果: [1]- 已杀死 sleep 200 [2]+ 已杀死 sleep 200 二、编写脚本 linux.../bin/bash # 脚本名:kill_process.sh # 脚本功能:强制杀死进程 方式kill -9 # 1通过ps查询进程的id # 2使用kill -9 强制终止进程...函数功能:根据进程名杀死程序 参数:进程名 返回值:无 !...————————————————————— # 根据进程名查询包含进程名的进程 并排除grep查询进程和此脚本进程 ps -ef | grep “$pName” | grep -v grep | grep
1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序。 ps -A 显示所有程序。...2.杀进程和查看进程对应PID目录下exe文件信息 最常用的方法是ps -aux或者ps -ef 然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。...使用kill命令结束进程:kill -a 进程pid 或者 killall 程序名 查看对应PID目录下的exe文件信息: [root@localhost postfix]# ps -aux|grep
gdb进行多进程调试主要有以下几种方法,分别是follow-fork-mode 方法,attach 子进程方法。...child:fork之后调试子进程,父进程不受影响。 如果需要调试子进程,那么gdb启动之后,执行`(gdb) set follow-fork-mode child`并在子进程处设置断点。...detach-on-fork:set detach-on-fork on|off on:断开调试follow-fork-mode指定的进程。 off:gdb将控制父进程和子进程。...follow-fork-mode指定的进程将被调试,另一个进程置于暂停(suspended)状态。...attach调试子进程 更改上述示例程序子进程睡眠时间为60秒,然后让子进程在后台运行,然后通过ps命令查询到子进程ID [chainyang@DSNO_DP_PD_2 ~/small_program]
本文将会带着大家认识的各种 进程 状态 ---- 正文 在谈 进程状态 之前,首先要回顾下之前的 进程 相关知识 OS管理的本质是先描述,再组织 OS并非直接管理 进程 ,而是管理 进程 的 PCB(...,即把手机揣进兜里,然后 专心执行走路这个 进程 进程状态 进程 有各种运行状态,方便OS进行管理,在 Windows 中,进程 状态是这样的 而在我们 Linux 中,新建、就绪、运行都可以看作...运行 R 这一个状态,所以比较清晰 而我们今天要学习的正是 Linux 中的 进程 状态 进程是何种状态,取决于此进程的PCB在哪里排队 ️运行 R 首先来看看第一种状态 R 以我们以往的认知来说...恢复运行,恢复后的 进程 在后台运行 注意: 进程 在后台运行时,是无法通过 ctrl+c 指令终止的,只能通过 kill -9 PID 终止 在 gdb 中调试代码时,打断点实际上就是 使...父进程,此时 子进程 会被OS领养 子进程 的 父进程 变为 1号进程 子进程 就变成了一个 孤儿进程 发出指令终止 父进程 假设 子进程 不被 1号进程 领养 子进程 退出时就会无人回收
这里面a是我生成的调试信息的文件名。 多进程 默认设置下, 在调试多进程程序时 GDB 只会调试主进程....但是 GDB > V7.0 支持多进程的分别以及同时调试, 换句话说, GDB 可以同时调试多个程序....follow-fork-mode (默认值 parent) 和 detach-on-fork (默认值 on )即可. follow-fork-mode detach-on-fork 说明 parent on 只调试主进程...(GDB默认) child on 只调试子进程 parent off 同时调试两个进程,gdb 跟主进程, 子进程 block 在 fork 位置 child off 同时调试两个进程, gdb 跟子进程..., 主进程 block 在 fork 位置
,这种行为称为 写时拷贝 刚开始,父子进程共同使用同一块空间 当子进程修改共享值后 ---- 进程地址空间 下面来好好谈谈 进程地址空间 (虚拟地址) ️虚拟地址 在早期程序中,是没有虚拟地址空间的...因为每个进程都有属于自己的空间,OS 在管理进程时,能够以统一的视角进行管理,效率很高 光有 虚拟地址空间 是不够的,还需要一套完整的 ‘‘翻译’’ 机制进行程序寻址,如 Linux 中的 页表 +...后续对这块进行写入操作时,会直接拒绝 对于这种机制感兴趣的同学可以点击下面这几篇文章查看详细内容: Linux的虚拟内存详解(MMU、页表结构) ARM体系架构——MMU 逻辑地址、页表、MMU等...️写时拷贝 Linux 中存在一个很有意思的机制:写时拷贝 这是一种 赌bo 行为,OS 此时就赌你不会对数据进行修改,这样就可以 使多个 进程 在访问同一个数据时,指向同一块空间,当发生改写行为时...(权限设置) 将 进程管理 和 内存管理 进行 解耦,方便 OS 进行更高效的管理 可以让进程以统一的视角看待自己的代码和数据 ---- 总结 以上就是本篇关于 Linux进程学习【进程地址】的全部内容了
使用“kill -9 进程号”命令,可以结束掉mysqld_safe进程。 使用”killall mysqld”命令,可以杀掉所有已mysqld命名的进程。
Linux C/C++开发中gdb进行多进程和多线程的调试一直比较麻烦,在CSDN上看到高科的一篇文章《gdb调试多进程和多线程命令》比较有启发,这里就自己重新整理并做了一个GDB多进程/线程的调试实践...1 原文整理 默认设置下,在调试多进程程序时gdb只会调试主进程。...:只调试主进程 child on 只调试子进程 parent off 同时调试两个进程,gdb跟主进程...3.1 设置调试模式和Catchpoint 设置调试父子进程,gdb跟主进程,子进程block在fork位置。.../nptl/sysdeps/unix/sysv/linux/fork.c:130 (gdb) info inferiors ######显示正在调试的进程:1前面的星号表示当前调试的进程
在病毒分析的过程中,时常会遇到很多病毒为了躲避杀软的检测,使用进程注入的方式,将shellcode注入到系统进程中执行,本文将介绍一些在遇到shellcode注入进程时所使用的调试技巧。...可以看到这一段数据中有明文显示的可疑字符串了,看起来像是网络连接相关的,到这一步就要想办法来调试这段shellcode,这里有两种调试的思路。...如果修改为0xCC,需要注意,应该把调试器的实时调试设置选成“附加前无需确认”,这样进程启动后才会自动附加到OD进行调试(记得将内存修改回原值,如果没有自动附加,就手动附加一下进程): ?...如果修改成jmp当前地址,那么需要手动打开OD,选择要附加的进程,然后跳转到执行上下文的地址下断点,断下来后把内存地址修改为原值,再继续调试: ?...本文使用了几个示例,讲解了在恶意代码分析过程中遇到远程进程注入时的一些调试方法,虽然调试技巧有很多种,但万变不离其宗,在调试过程中可以根据自己的需要选择不同的调试思路,也可以根据原理开发一些工具,如shellcode
我们继续延申调试事件的话题,实现进程转存功能,进程转储功能是指通过调试API使获得了目标进程控制权的进程,将目标进程的内存中的数据完整地转存到本地磁盘上,对于加壳软件,通常会通过加密、压缩等手段来保护其代码和数据...在这种情况下,通过进程转储功能,可以将加壳程序的内存镜像完整地保存到本地,以便进行后续的分析。在实现进程转储功能时,主要使用调试API和内存读写函数。...具体实现方法包括:以调试方式启动目标进程,将其暂停在运行前的位置;让目标进程进入运行状态;使用ReadProcessMemory函数读取目标进程内存,并将结果保存到缓冲区;将缓冲区中的数据写入文件;关闭目标进程的调试状态...首先老样子先来看OnException回调事件,当进程被断下时首先通过线程函数恢复该线程的状态,在进程被正确解码并运行起来时直接将该进程的EIP入口地址传递给MemDump();内存转存函数,实现转存功能...: %d 进程PID: %d \n", hProcess, pDebug->dwProcessId); HANDLE hThread = OpenThread(THREAD_ALL_ACCESS,
我们继续延申调试事件的话题,实现进程转存功能,进程转储功能是指通过调试API使获得了目标进程控制权的进程,将目标进程的内存中的数据完整地转存到本地磁盘上,对于加壳软件,通常会通过加密、压缩等手段来保护其代码和数据...在这种情况下,通过进程转储功能,可以将加壳程序的内存镜像完整地保存到本地,以便进行后续的分析。 在实现进程转储功能时,主要使用调试API和内存读写函数。...具体实现方法包括:以调试方式启动目标进程,将其暂停在运行前的位置;让目标进程进入运行状态;使用ReadProcessMemory函数读取目标进程内存,并将结果保存到缓冲区;将缓冲区中的数据写入文件;关闭目标进程的调试状态...首先老样子先来看OnException回调事件,当进程被断下时首先通过线程函数恢复该线程的状态,在进程被正确解码并运行起来时直接将该进程的EIP入口地址传递给MemDump();内存转存函数,实现转存功能...: %d 进程PID: %d \n", hProcess, pDebug->dwProcessId); HANDLE hThread = OpenThread(THREAD_ALL_ACCESS
GDB调试 GDB是GUN发布的一个强大的程序调试工具,也是Linux程序员不可或缺的一大利器。 安装GDB 注意安装你所需要的版本。...gcc -g hello.c -o hello 启动GDB调试。 gdb hello GDB和Shell一样支持命令补全。。...s ---- 监视变量 print 调试程序最基本的需求就是监视变量的值,可以使用print命令,缩写为p,显示指定变量的值。...bt ---- 退出GDB quit 调试完毕后,使用quit命令,缩写为q,退出gdb程序。 q
Coredump 调试 Coredump是什么?...Linux环境下,当程序异常退出(发生段错误)时,会产生一个core文件,该文件记录了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成的一个文件...---- 前期设置 设置core文件生成的目录,其中%e表示程序文件名,%p表示进程ID,否则会在程序的当前目录生成dore文件。...---- 如何调试 编译的时候添加-g选项,增加调试信息。 gdb program core_file **示例:**一个会产生异常退出的程序,非法指针访问。...执行调试命令,结果如下图所示。
对于处理器消耗型的进程,调度策略往往是降低他们的执行频率,延长运行时间。 Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...一、普通进程 在 Linux 中普通进程依赖称之为 nice 值 的东东来进行进程的优先级描述。nice 值的范围是 [-20, 19]。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程的优先级越小 任何实时进程的优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总的调度结构...Linux 调度时机 ---- 一、进程切换 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。...也可以用 pidstat -w 命令查看进程切换的每秒统计值: pidstat -w 1 Linux 3.10.0-229.14.1.el7.x86_64 (bj71s060) 02/01/2018
以前在IDE调试的话,就很容易设置断点,查看参数值,到了 linux 下就变得比较麻烦了。 目前觉得比较重要的就是: 1.设置断点: gdb命令 break,也可以用 b 。...取消的话 undisplay 编号 4.列出信息 gdb命令 info,info break, info display 5.调试 单步调试 n,进入函数的单步调试 s,跳到下一个断点 c 6.读取文件
引言 在Linux环境中,进程的加载方式涉及到静态进程和动态进程两个概念。这两种方式都有各自的优势和劣势,而正确选择加载方式对于应用程序的性能和管理至关重要。...本文将深入探讨静态进程和动态进程的特点、优劣势,并为你提供在不同场景下的选择建议。 1....静态进程适用于不经常更新和部署的应用,以及对独立性和部署简便性要求较高的环境。 2. 动态进程 动态进程是一种加载方式,它在程序运行时依赖外部的共享库(动态链接库)。...相对于静态进程,动态进程的可执行文件较小,因为它只包含程序自身的代码,而共享库的加载则在程序启动时由动态链接器完成。...无论选择静态进程还是动态进程,了解它们的特点以及在不同情况下的适用性,可以帮助开发者更好地优化程序的性能和管理。 结论 静态进程和动态进程各有优劣,选择合适的加载方式取决于项目的具体需求。
这个进程是执行/bin/init这一文件(程序)生成的。当Linux启动的时候,init是系统创建的第一个进程,这一进程会一直存在,直到我们关闭计算机。这一进程有特殊的重要性,我们会不断提到它。...如何创建一个进程 实际上,当计算机开机的时候,内核(kernel)只建立了一个init进程。Linux内核并不提供直接建立新进程的系统调用。剩下的所有进程都是init进程通过fork机制建立的。...当进程fork的时候,Linux在内存中开辟出一片新的内存空间给新的进程,并将老的进程空间中的内容复制到新的空间中,此后两个进程同时运行。...进程与线程(thread) 尽管在UNIX中,进程与线程是有联系但不同的两个东西,但在Linux中,线程只是一种特殊的进程。多个线程之间可以共享内存空间和IO接口。...所以,进程是Linux程序的唯一的实现方式。 总结 程序,进程,PID,内存空间 子进程,父进程,PPID,fork, wait 觉得本文对你有帮助?请分享给更多人。
Linux进程编程 3.1 fork系统调用 3.1.1 fork工作原理 3.1.2 fork函数 3.1.3 fork编程示例 3.1.4 小结 3.2 exec系统调用 3.2.1 exec函数族作用...执行过程如下: Linux内核在进程表中为子进程分配一个表项,然后分配PID。...子进程表项的内容来自父进程,fork会将父进程的表项复制为副本,并分配给子进程; Linux内核使父进程的文件表和索引表的节点自增1,创建用户及上下文; 将父进程上下文复制到子进程上下文空间中; fork...这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。...我们应该明白了,Linux下是如何执行新程序的,每当有进程认为自己不能为系统和用户做出任何贡献了,他就可以发挥最后一点余热,调用任何一个exec,让自己以新的面貌重生;或者,更普遍的情况是,如果一个进程想执行另一个程序
调度策略 进程可以分为实时进程和普通进程,对于这两种不同类型的进程肯定有不同的调度策略,task_struct中的policy就用来表示调度策略。...task_struct中配有优先级,需要注意的是优先级数越小优先级越高,实时进程的优先级处于099之间,普通进程的优先级处于100139。...普通调度策略有 SCHED_NORMAL, SCHED_BATCH,SCHED_IDLE SCHED_NORMAL:普通的进程 SCHED_BATCH:后台进程 SCHED_IDLE:空闲时运行的进程...,可以打断所有其他进程,并且该进程不会被抢占 rt_sched_class:RR算法或者FIFO算法的调度策略,具体由该进程的task_struct->policy决定。...CFS为每个进程定义一个虚拟运行时间vruntime,每次总是选择vruntime最小的那个进程,进程得到处理机后变随着其运行时间的增加 增加其vruntime。
领取专属 10元无门槛券
手把手带您无忧上云