今天接到一个任务是将原来运行在mac的应用移植到linux,原因当然是因为客户那边当前是linux环境,也不想再采购mac电脑。 通常来说,这个工作并不难,因为我选用的服务器端技术是c或者golang,这两种技术具有很好的可移植性,而且大多是重新编译即可运行,所以接到任务的开始并没有把这个当一回事。 跟想象中的也差不多,搭建好linux测试服务器,在mac上把运行很久的应用重新交叉编译了一遍,部署到linux实验环境,启动、测试,看起来一切正常。准备打包交活,这时候发现一个问题,程序无法终止。 简
在前文,我们已经讲解了vim工具以及gcc/g++的使用,我们可以进行编写代码以及编译代码了,但是还没有学习如何在Linux下对代码进行调试,通过本章的学习,将学会如何使用gdb对代码进行调试。
编写代码我们使用vim,编译代码我们使用gcc/g++,但是我们,不能保证代码没问题,所以调试是必不可少的。与gcc/vim一样,Linux下的调试功能也是独立的一个工具——gdb 那么我们话不多说,开启今天的话题!
之前刚接触服务器的时候,我还不太会看自己使用资源的情况,直到我使用hisat2比对的时候把服务器的资源(线程)全占满了【Linux||你的服务器怎么一片绿?】,我才开始去了解。
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具;
本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
在 Linux 中,你可以使用 Ctrl+C 键来中止终端中的运行程序。这对 Ubuntu 和其他 Linux 发行版都适用。
我们看到这里面就展示了当前正在运行的进程,那大家看这其实就是我们当前打开的程序嘛
vim 可以编写代码,gcc/g++ 可以编译代码,此时只最后一件神器,就能进行完整的开发工作,那就是通过 gdb 调试代码,毕竟谁都不敢保证自己的代码没有问题,所以就有调试器这种东西帮助我们定位问题,进而解决问题
linux系统用后台运行时 Console.ReadKey();还是会退出程序。 用 Thread.Sleep(-1);却可以。为什么?
Linux上,如果一个进程需要保持后台运行,尤其是在Linux服务器上,后台运行程序、避免因为SSH连接断开而导致进程停止运行时,该怎么办?
为了搞明白正在运行的进程是什么意思,我们有必要了解进程的不同状态,那么话不多说,开始我们今天的话题!
finish:运行程序,知道当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。
使学生理解Linux中进程控制块的数据结构,Linux进程的创建、执行、终止、等待以及监控方法。并重点掌握fork函数的使用以及exec系列函数。
Linux开发工具的使用 零、前言 一、Linux软件包管理器yum 1、yum介绍 2、rzsz 2、yum工具的基本操作 1)查看软件包 2)安装软件 3)卸载软件 二、 Linux开发工具vim 1、vim的介绍 2、vim基本操作 3、vim正常模式命令集 4、vim底行模式命令集 5、vim操作总结 6、简单vim配置 三、Linux编译器-gcc/g++ 1、程序生成过程 1)预处理 2)编译 3)汇编 4)链接 2、函数库 四、Linux调试器-gdb 1、背景及概念 2、调试命令 五、Lin
linux系统上使用gcc生成可执行程序:gcc -g -W helloworld.c -o helloworld
在Linux环境下进行脚本开发时,常常需要自主管理进程,确保某些关键程序在用户退出后仍能继续运行,而不依赖于systemd这样的进程管理工具。本文将探讨如何通过其他方法实现这一目标。
1. 在调用fork函数之后,当执行的程序代码转移到内核中的fork代码后,内核需要分配新的内存块和内核数据结构给子进程,内核数据结构包括PCB、mm_struct和页表,然后构建起映射关系,同时将父进程内核数据结构中的部分内容拷贝到子进程,并且内核还会将子进程添加到系统进程列表当中,最后内核空间中的fork代码执行完毕,操作系统中也就已经创建出来了子进程,最后返回用户空间,父子进程执行程序fork之后的剩余代码。
使用Yum安装gcc(Linux下c语言编译器) ,vim编辑器(也可以直接使用vi,vim编辑器有更多功能,还具有代码高亮效果,使用起来更舒服)
简介:以下是一些每个 Linux 用户必须使用的键盘快捷键。使用命令行时,这些 Linux 快捷键将提升你的工作效率。
此时如果键入 Ctrl+C ,程序会收到一个 SIGINT信号,如果不做特殊处理,程序的默认行为是终止(如上图)。
首先我们要清楚的是,操作系统是一个进行软硬件资源管理的软件。操作系统对下要管理好底层硬件。每一个硬件的生产产商都会给他们的产品提供对应的驱动程序,驱动程序是特定于某一硬件或系统设备的软件组件,它为系统提供管理硬件的各种功能。当软件需要实现某些功能,而这些功能无法通过应用程序单独实现或难以实现时,驱动程序就能派上用场。操作系统通过驱动程序对底层的硬件进行管理。
可执行程序加载到内存中,形成进程时,操作系统要先创建描述进程的结构体对象。进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。课本上称之为PCB(process control block), Linux操作系统下的PCB是: task_struct
Linux操作系统有很多功能,其中最简单和直接的方式就是命令行(Command Line)。
我们在生产环境下运行的系统要求优雅退出,即程序接收退出通知后,会有机会先执行一段清理代码,将收尾工作做完后再真正退出。我们采用系统Signal来 通知系统退出,即kill pragram-pid。我们在程序中针对一些系统信号设置了处理函数,当收到信号后,会执行相关清理程序或通知各个子进程做自清理。kill -9强制杀掉程序是不能被接受的,那样会导致某些处理过程被强制中断,留下无法恢复的现场,导致消息被破坏,影响下次系统启动运行。 最近用Golang实现的一个代理程序也需要优雅退出,因此我尝试了解了一下Gol
Linux进程概念 零、前言 一、冯诺依曼体系结构 二、操作系统 三、进程 1、描述进程-PCB 2、查看进程 3、获取进程标示符 4、创建进程-fork() 5、进程状态 6、僵尸进程 7、孤儿进程 8、进程优先级 9、环境变量 1)测试PATH 2)测试HOME 3)如何获取环境变量 4)命令行变量 零、前言 本章主要讲解操作系统的一些基础概念知识,为进程的学习做铺垫 一、冯诺依曼体系结构 概念: 冯诺依曼体系结构规定了硬件上的数据流动,而大部分计算机都遵守冯诺依曼体系,如笔记本,服务器等
重导与管道: 重导(redirect)可将某命令的结果输出导文件中, 它有两中命令: “>”和“>>”。 “>”可将结果输出到文件中, 该文件原有的内容会被删除: “>>”则将结果附加到文件中, 原文件内容不会被清除。范例如下: ls –a>dir.txt ← 将 ls –a命令执行结果输出到 dir.txt文件。 cat data1.txt >> data2.txt ← 将 data1.txt 内容附加到 data2.txt文件之后。 通道(pipe)命令的符号是“ ”,可将某命令的结果输出给另一命令,一下范例将 ls命令的输出结果传给 grep命令过滤: ls grep conf ← 搜索并显示 ls命令运行结果中包含有“conf”字符串 在举一个删除文件或目录的例子,可以利用 yes命令重复输出“y”字符的特性,将结果传给 rm命令,如此即可避免重复输入“y”: yes rm –r mydi 用光盘及软盘在 Linux的文字模式下要使用光盘或软盘, 并不是只将光盘或软盘放入即可, 用户需要运行加载的命令, 才可读写数据。 所谓加载就是将存储介质( 如光盘和软盘)指定成系统中的某个目录(如/mnt/cdrom或 mnt/floppy)。通过直接存取此加载目录,即可读写存储介质中的数据。以下就来看看文字模式下的加载及卸载命令。 加载的mount(登上、增加)命令 要使用光盘时先把光盘放入光驱, 然后执行加载的mount命令, 将光盘加载至系统中: mount /dev/mut/cdrom← 加载光盘 同理,使用软盘之前也需要和光盘一样,必须先加载后才能使用: mount /dev/mut/floppy← 加载软盘 卸载的umount命令 如果不需要使用光盘或软盘, 则需先执行卸载命令之后, 才能将光盘或软盘退出。 范例如下:umount /mnt/← 光盘卸载 在不使用软盘时执行umount 命令卸载软盘,再将软盘拿出 umount /mnt/← 软盘卸载 后台运行程序 用户有时的程序有可能要花费很多时间, 如果将它放在前台运行, 将导致无法继续做其他事情, 最好的方法就是将它放在后台运行, 甚至可能希望在用户注销系统后, 程序还可以继续运行。让我们看看那如何实现这一目的。 在后台运行程序的&、 bg命令 将程序放到后台运行的最简单方法就是在命令最后加上“&”,范例如下: update db &← 在后台执行 locate 数据库更新命令 bg ← 将更新操作放到后台运行 前台运行的程序fg命令 如果用户当前已有程序在后台运行,可以输入fg命令,将它从背景中移到前台运行: fg ← 放到前台执行的命令会显示出来 在退出后让程序继续运行的nohup命令 此命令可使用户退出系统后,程序继续运行。范例如下: nohup myserver&然后用户就可以退出了, 当再次登录的时候, 可以用ps–aux命令看到程序仍在后台中运行。
Linux中的基础开发工具及其使用,包括yum(软件包管理器)、vim(编辑器)、gcc/g++(编译器)、makefile(项目自动化构建工具)、gdb(调试器)等。
GDB调试 GDB是GUN发布的一个强大的程序调试工具,也是Linux程序员不可或缺的一大利器。 安装GDB 注意安装你所需要的版本。 wget http://ftp.gnu.org/gnu/gdb/gdb-8.1.1.tar.gz tar -zxvf gdb-8.1.1.tar.gz cd gdb-8.1.1 ./configure make make install ---- 启动GDB 使用GDB的前提。 gcc -g hello.c -o hell
启动GDB后,某些行前面会显示(gdb)提示符,所以gdb指令都输在(gdb)提示符的后面。
我们从实现的角度来看: 进程是一种数据结构,用描述程序运行的状态和系统变化的状态。
在C语言 程序员内功心法之程序环境和预处理 博文中,我们就学习到 – 一个程序要被运行起来需要经历四个阶段:预处理 (预编译)、编译、汇编、链接,下面我们来简单回顾一下这四个阶段会进行的操作。
C使用命令gcc 源文件名.c -o 源文件名来生成可执行文件,C++使用命令g++ 源文件名.cpp -o 源文件名来生成可执行文件。
现在已经进入到ch2文件夹下,开始编写一个简单的C++程序,首先创建一个C++文件,
kill :发送指定的信号到相应进程。不指定信号将发送SIGTERM(15)终止指定进程。若仍无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。
会不会写 makefile ,从一个侧面说明了一个人是否具备完成大型工程的能力
来源:公众号【编程珠玑】 作者:守望先生 ID:shouwangxiansheng 如何实现一个守护进程?如何让程序在后台运行?这是后台开发面试常问的一道题,那么守护进程到底是什么?又该如何实现?
============================================================================= a.txt c:\abc\a.txt windows写法(反斜杠) /abc/a.txt linux写法(斜杠) ----------------------------------------------------------------------------- 相对路径表达方法 cat a.txt 如果不加任何路径说明,默认是当前目录下的文件。 cat ./a.txt 明确的指明,a.txt在当前目录下,这是一种相对路径的写法。 cat ../a.txt 明确的指明,a.txt在上一级目录下,这也是一种相对路径的写法。 cat ./../a.txt 明确的指明,a.txt在上一级目录下,这也是一种相对路径的写法(与上一种等同)。 cat ../2/a.txt a.txt 在上一级目录的2子目录下。 ----------------------------------------------------------------------------- 绝对路径,绝对路径总是从根目录开始的。 /home/zhujy/2/a.txt
我们常见的计算机,如笔记本。或者不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
对于上面的指令足以应付我们日常遇到的一些代码进行相关的调试,解决遇到的问题,同时对于gdb的基本使用我们也能够基本掌握。另外,对于gdb的使用我们应该在后期进行熟练的掌握与使用。
Linux 系统主要分为 内核(kernel) 和 外壳(shell),普通用户是无法接触到内核的,因此实际在进行操作时是在和外壳程序打交道,在 shell 外壳之上存在 命令行解释器(bash),负责接收并执行用户输入的指令,本文模拟实现的就是一个 简易版命令行解释器
最近项目中需要Python的打包,看到网上也没有很详细的资料,于是做了一些示例程序。小小的研究了一下,Python如何在Windows和Linux上打包,并把程序源码以及各个记录上传到Github上与大家分享。
这两天,工程师小刘时常在自己的笔记本上编译Linux内核。由于编译执行的时间比较长,他通勤时经常需要笔记本部开着盖放在车座上,以便程序不断。他奋斗的场景让人甚是同情,因为我上大学时也是通宵开着笔记本编译内核,不敢锁屏更怕断电断网。
开发和使用linux程序时,有时程序莫名其妙的down掉了,却没有任何的提示(有时候会提示core dumped)。
搞电子都知道,电路不是焊接出来的,是调试出来的。程序员也一定认同,程序不是写出来的,是调试出来的。那么调试工具就显得尤为重要,linux作为笔者重要的开发平台,在linux中讨论调试工具主要是为那些入门者提供一些帮助。调试工具能让我们能够监测、控制和纠正正在运行的程序。我们在运行一些程序的时候,可能被卡住或出现错误,或者运行过程或结果,没能如我们预期,此时,最迫切需要明白究竟发生了什么。为了修复程序,剖析和了解程序运行的细节, 调试工具就成为了我们的必备工具,工于善其事,必先利其器。在Linux下的用户空间调试工具主要有系统工具和专门调试工具:'print' 打印语句,这是新手最常用的,也是最不提倡使用的;查询 (/proc, /sys 等)系统的虚拟文件查看,这个方法有局限性;跟踪 (strace/ltrace)工具使用这个比较普遍,值得提倡;Valgrind (memwatch)内存排除工具,在内存排除方面比较独到,是内存排错的法宝;GDB大名鼎鼎的程序调试工具,这个是个全能的工具,没有完不成的,只有你不知道的。
返回值:自进程中返回0,父进程返回子进程id,出错返回-1。 进程拥有独立性,fork之后就变成了两个程序,父子进程共享后边的代码。 那么为什么给父进程返回的就是子进程的pid,而给子进程返回的就是0呢? 就好比孩子只能有一个亲生的父亲,而一个父亲可以拥有很多亲生孩子,每个孩子都是独立不同的。 fork函数是在什么时候创建的子进程呢?
领取专属 10元无门槛券
手把手带您无忧上云