首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

程序运行时候替换程序文件会影响进程吗?

我要升级一个程序,在程序运行时候用新程序文件替换旧程序文件,然后杀死进程,重新启动程序。在程序运行时候替换程序文件,会导致进程出现异常吗?...动态链接器加载主程序依赖共享时候,调用函数mmap()为共享代码段和数据段创建私有的文件映射。 内核为每个文件创建一个页缓存。...进程读代码段或者数据段中某一页时候,直接把文件页缓存中物理页映射到进程虚拟地址空间,当进程修改这一页时候,就会生成页错误异常,页错误异常处理程序为文件页缓存中物理页生成一个副本,然后把虚拟页映射到这个副本...直接修改程序文件对进程有影响,假设进程正在函数func1()里面调用函数func2()时候替换程序文件,函数func2()位置变化,那么会跳转到一个未知地方,导致进程出现异常。...glibc函数unlink()调用系统调用unlink(),系统调用unlink()处理过程如下。

59710

Linux后台运行jar程序

Linux后台运行jar程序Linux系统中,有时候我们需要将Java程序以后台进程方式运行,以便在关闭终端或退出登录时仍然保持程序运行状态。...本文将介绍如何在Linux中后台运行一个Javajar程序。准备工作在开始之前,确保您Linux系统中已经安装了Java运行环境(JRE 或 JDK)。...java -jar YourProgram.jar是运行jar程序命令。> output.log将程序标准输出重定向到一个名为output.log文件。...通过以上步骤,您就可以在Linux系统中成功地将一个Javajar程序以后台进程方式运行起来。示例代码,以帮助理解:shellCopy code#!...fi在上述示例代码中,我们首先通过cd命令进入了存放jar程序目录。然后,使用pgrep命令检查是否已有同名后台进程在运行。如果已经有同名进程在运行,输出提示信息并结束脚本执行。

29310
您找到你想要的搜索结果了吗?
是的
没有找到

Linux程序是怎样运行

/a.out 在shell终端上运行可执行程序标准流程: 启动终端仿真器应用程序 输入可执行文件所在相对路径或者绝对路径 如果该可执行程序需要输入参数的话,还需要输入参数 比如,我们在终端上输入 ls...构建运行环境 在做完上述完整性检查之后,最终会执行reader_loop函数,该函数,定义在eval.c中,主要作用是读取给定程序名称和参数。...可执行文件所需参数 可执行文件所在环境变量 在该函数中,最终就是运行可执行程序,这一步操作,是在kernel中操作。...从磁盘上读取与我们可执行二进制文件链接程序解释器和,并将其加载到内存中。 elf_phdata = load_elf_phdrs(&loc->elf_ex, bprm->file); if (!...如我们所见,execve系统调用不会将控制权返回给进程,但是调用者进程代码,数据和其他段只是被程序段所覆盖。应用程序退出将通过退出系统调用实现。 至此,整个程序从开始运行到退出,整个流程完。

3.3K30

linux编译运行c++程序

要求保存程序名为count-character-in-string.cc,运行方式为 ..../count-character-in-string your-string 在linux环境下编译运行c++我也是第一次,同时他这种运行方式也和我之前在win下不一样,在win下我都是直接编译运行,...首先通过linux自带编辑软件创建一个test.cc文件 demeen@VM-0-4-ubuntu:~/cpp_code$ nano test.cc 然后将上述代码复制进去,依次摁下ctrl+o,Enter...之后输入如下命令,这个命令含义是使用g++编译test.cc程序,并生成名为test可执行程序 demeen@VM-0-4-ubuntu:~/cpp_code$ g++ test.cc -o test.../test" argv[1] = "abcd" argv[2] = "hello" argv[3] = "world" char *argv[]指向数组中至少有一个字符指针,即argv[0],他通常指向程序可执行文件文件名

9.4K20

Linux系统运行WinForm程序

Linux系统下,虽然也有桌面窗体应用程序,但应用很少。 能否将WinForm程序移植到Linux系统上面呢?...目前,Novell公司开源项目mono提供了将.NET程序运行在各种非Windows平台能力,例如控制台程序,WinForm程序和ASP.NET等,下面我们对各Linux系统进行一下实验,由于Liunx...理论上,在Redhat也可以运行一个mono+Gtk#窗体界面,无赖我Redhat先是装mono 2.8.1,我当前使用monodeveloper开发Gtk程序必须使用mono 2.8.2...总结: 目前在Linux平台上运行WinForm程序基本上是可行,推荐使用OpenSUSE发行版,不过对WinForm应用程序中文支持还有问题。...如果要开发真正跨平台窗体应用程序,推荐使用Gtk#做开发,它开发出.NET程序,即可运行Linux系统,也可以运行在Windows系统。

6.2K70

linux程序在后台运行

最近要用php进程发奖励,因为要精确到秒执行,linux系统定时用不了,于是写了个死循环,usleep是必须,否则系统cpu占用很高系统cpu。 执行时候碰到一个问题,关闭终端后进程也终止了。...,我们需要在终端启动一个程序,并使之运行——但是如果关闭终端,那么这个程序也就随着关闭了。...那么有没有什么方法在关闭终端后,让已经从这个终端启动程序继续运行呢?...tty是所有终端设备总称 pty是其中一类,伪终端,或者叫虚拟终端 “&” 命令行结尾法: 在Unix/Linux下如果想让程序独立终端运行,一般都是使用 & 在命令结尾来让程序自动运行。...,才可以关闭此终端,否则可能导致已经启动进程被关闭(按enter——如果程序持续输出信息而没有出现 $ 或 #) 其他相关命令: jobs:查看当前有多少在后台运行命令 fg:将后台中命令调至前台继续运行

5.1K10

NodeJS 导入包时候出现 @types 错误导致程序无法运行

在一次开发 NodeJS 项目的时候,我们希望包导入是用 import 导入方式。 但是在具体导入时候发现是使用 @types 导入。...如果上面的图显示导入方式,结果结果是导致程序错误无法运行。 问题和原因 尽管我们在包配置文件中添加了需要导入版本。...@types 经过一些研究,有时候 @types 这个使用是因为在 JS 世界中有很多包不是通过 TypeScript 进行开发,使用是普通 JS 。...为了让使用 JS 能够在 TypeScript 上使用,那么我们在导入时候需要添加 @types 但是我们这个问题是,我们并没有添加需要 @types/bluebird, 但是这个是从哪里来呢...但是实际使用时候,我们程序使用是另外一种导入方式。 因此,针对这个问题,我们最简单办法就是将 /@types/request-promise 从你依赖中删除。

1.6K20

Linux下可以替换运行程序么?

今天被朋友问及“Linux下可以替换运行程序么?”,以前依稀记得Linux下是可以(而Windows就不让),于是随口答道“OK”。...于是自己又再做了几个实验: (1)先rm删除正在运行test,然后cp test2 test就没有错误了。 (2)先mv改名正在运行test,然后cp test2 test也没有问题。...Linux由于Demand Paging机制关系,必须确保正在运行程序镜像(注意,并非文件本身)不被意外修改,因此内核在启动程序后会锁定这个程序镜像inode。...不过想想也可以宽恕,毕竟ld也是用户态程序,没有权利去锁定inode,也不应与内核文件系统底层实现耦合。 到这里都还算在情理之中,看起来Linux也都处理很好。...由此可见,想要安全替换已加载动态,还是用“笨拙”“rm + cp”吧,看似捷径“cp覆盖”会直接葬送掉你程序…… 看来,我再一次低估了Linux健壮性,看似符合逻辑流程也可能会带来灾难性后果

6.3K20

使程序Linux下后台运行

一、为什么要使程序在后台执行 我们计算程序都是周期很长,通常要几个小时甚至一个星期。我们用环境是用putty远程连接到日本Linux服务器。...所以使程序在后台跑有以下三个好处: 1:我们这边是否关机不影响日本那边程序运行。...二、怎么样使程序在后台执行 方法有很多,这里主要列举两种。假如我们有程序pso.cpp,通过编译后产生可执行文件pso,我们要使pso在linux服务器后台执行。...如果我们要在退出shell时候继续运行进程,则需要使用nohup忽略hangup信号,或者setsid将将父进程设为init进程(进程号为1) $ echo $$ 21734 $ nohup ....还有一种更加强大方式是使用screen,首先创建一个断开模式虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行任何命令,都能达到nohup效果,这在有多个命令需要在后台连续执行时候比较方便

4.2K20

如何使程序Linux后台运行

经常在Linux上面运行程序都有这样体验: 某个程序运行时候,会产生大量log(提示)信息,但实际上我们只想让它跑一下而已,log暂时不需要或者后面才有需要。...同时run多个相同或者不同程序时候,占了好多命令行界面,作为一个强迫症患者,就想要一个清爽界面!...如果程序已经在运行了,其实也是有办法加入后台,只需使用快捷键 ctrl-z 就能立马放到后台中了,不过这种方法其实是暂停了程序运行,所以想要让程序继续运行还得输入 “fg” 命令让程序返回前台来。...◆ ◆ ◆ ◆ ◆ nohup命令来避免程序中断 在命令末尾加个&符号后,程序可以在后台运行,但是一旦当前终端关闭(即退出当前帐户),该程序就会停止运行。...但是screen缺点是开很多screen进程时候,会生成多个伪终端,比较占用系统资源,另外批量生成screen同时并在screen里面运行程序有些困难,不如nohup + &批量处理方便。

8.4K20

LWN: 在 Linux运行 macOS 程序

▍Beyond Darwin 除了Darwin,还有一些工具和函数也用在了Darling中,包含Cocotron(一个Cocoa开源实现,Cocoa是Apple桌面应用程序API)。...,因此没法保证程序可以运行正确。...▎What can you do with Darling Darling还是跟Wine不同,没法在Linux运行例如Xcode IDE这样完整macOS GUI程序。...“过去几年我们花了很多精力解决了一些xcodebuild运行问题,希望能在命令行上编译Xcode项目代码了,我想等这个工作正式完成时候,就会有更多的人加入Darling项目,因为这样就足够让人实现在Linux...总之,还需要一些时间才能看出Darling会否是一个成功项目,希望最终能达到像Wine那样成功,使得大量macOS application都能在Linux运行起来。

6.2K10

Linux后台运行Python程序几种方法讲解

1.第一种方法是直接用unhup命令来让程序在后台运行,命令格式如下: unhup python 文件名.py (> ***.log )& 在这个命令中,python指定我们要执行文件为python文件...括号内容表示可以将平时输出到控制台中内容重定向到*.log这个文件中,这个是可选,如果没有这个,则会默认输出到nohup.out文件中。括号后面你&表示后台运行。...,我们就可以使用下面的这条命令来执行该脚本从而让程序在后台运行: ..../start.sh表示运行当前目录下脚本start.sh,> result.log表示把原来输出到控制台东西都输出到result.log文件中,&表示在后台运行 我们通过ps -e命令可以查看后台运行进程都有哪些...上图我们可以看到,我们脚本start.sh和Python程序都已经在后台成功运行,然后通过cat result.log | more就可以来查看原来输出到控制台信息 注:要想执行python文件中某个函数

3.5K30

【记录】使用python图形打开新窗口时候关闭之前窗口,运行结束后关闭当前窗口和程序

简单讲解 代码片段展示了如何使用 Python Tkinter 和 subprocess 模块来实现在 tkinter 窗口中打开另一个 Python 脚本过程,并在脚本运行结束后关闭当前窗口和程序...Tkinter : Tkinter 是 Python 标准 GUI ,用于创建用户界面。...在你代码中,你使用了 subprocess.run(["python", "D:/桌面/python项目/购买数量.py"]) 来运行名为 "购买数量.py" Python 脚本。...在你代码中,你使用了 sys.exit() 来确保在执行完购买数量脚本后退出当前程序。这样可以确保在购买数量脚本执行完成后结束程序运行。...结语 总体来说,代码展示了如何结合使用 Tkinter 和 subprocess 来实现 GUI 程序中打开外部脚本功能,并在完成任务后退出程序

9110

Linux用screen 在后台运行程序

只要再次登录到主机上执行screen -r就可以恢复会话运行。同样在暂时离开时候,也可以执行分离命令detach,在保证里面的程序正常运行情况下让Screen挂起(切换到后台)。...screen 使用 安装 一般linux系统都会自带screen,如果没有安装的话,使用 $ sudo apt-get install screen 或$ sudo yum install screen.../a.py 新建并执行a.py程序 会话分离 我们在一个窗口运行某个程序之后,想退出登录关闭terminal干点别的事,让程序在后台运行。...例如在上面的2637,kill -9 2637 即可杀死线程,当然就杀死了窗口 使用Ctrl a +k 杀死当前窗口和窗口中运行程序 使用Ctrl a 然后输入quit命令退出Screen会话。...需要注意是,这样退出会杀死所有窗口并退出其中运行所有程序 清除死去窗口 当窗口被杀死后,再用screen -ls 可以看到该窗口后面的(???dead)字样,说明窗口死了,但是仍在占用空间。

2.5K30
领券