天道酬勤,学无止境

Preventing management commands from running more than one at a time

I'm designing a long running process, triggered by a Django management command, that needs to run on a fairly frequent basis. This process is supposed to run every 5 min via a cron job, but I want to prevent it from running a second instance of the process in the rare case that the first takes longer than 5 min.

I've thought about creating a touch file that gets created when the management process starts and is removed when the process ends. A second management command process would then check to make sure the touch file didn't exist before running. But that seems like a problem if a process dies abruptly without properly removing the touch file. It seems like there's got to be a better way to do that check.

Does anyone know any good tools or patterns to help solve this type of issue?

评论

For this reason I prefer to have a long-running process that gets its work off of a shared queue. By long-running I mean that its lifetime is longer than a single unit of work. The process is then controlled by some daemon service such as supervisord which can take over control of restarting the process when it crashes. This delegates the work appropriately to something that knows how to manage process lifecycles and frees you from having to worry about the nitty gritty of posix processes in the scope of your script.

If you have a queue, you also have the luxury of being able to spin up multiple processes that can each take jobs off of the queue and process them, but that sounds like it's out of scope of your problem.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 警告:链接器:app_process 有文本重定位。 这会浪费内存并且存在安全风险。 请修复。 权限被拒绝(Warning: linker: app_process has text relocations. This is wasting memory and is a security risk. Please fix. Permissions denied)
    问题 我试图通过 Android 终端运行一个命令,但是当我执行我的命令时: “svc 数据启用/禁用”出现此错误: “警告:链接器:app_process 有文本重定位。这会浪费内存并且存在安全风险。请修复。权限被拒绝” 我在 htc one(android 4.4.2 kitkat, sense 5.5) rooted 下,安装了 Venom rom 5.7.0 和 xposed 框架。 如何避免此问题并顺利运行命令? Ps 我已将具有超级用户权限的命令发送给终端。 回答1 重定位错误是由 xposed 框架用自定义框架替换真正的 app_process 引起的,该框架在某种程度上未优化,因为它已构建为适用于所有现代(几乎所有......)Android 设备/系统。 卸载/恢复到库存后(通过 xposed 安装程序或通过闪烁安装期间在 sdcard 上创建的卸载 zip),您会发现警告消失了(以及所有与 xposed 相关的自定义设置)。 如果您正在编写脚本并且不想看到警告,只需将错误输出转发到 STDERR 以外的其他地方,即: svc data enable 2>/dev/null 启用 svc 数据的权限被拒绝? 这似乎不是因果关系,因为即使失败(显示适当的输出),它也会以 1 秒的间隔重试。 从来没有 htc,所以我不知道它是否可能受到他们的某种保护......但是
  • 防止显示一种形式的多个实例(preventing multiple instance of one form from displaying)
    问题 我正在开发一种应用程序,其中有一种主要形式可以同时使用的其他几种形式。 当用户单击以打开另一个表单时,我要创建它,以便单击表单的按钮不会再次打开该表单(如果已打开)。 由于用户仍然需要访问主窗体上的控件,因此showDialog将无法工作。 这是我的帮助窗口代码,所有其他表单都以相同的方式打开。 private void heToolStripMenuItem_Click(object sender, EventArgs e) { Form help = new help(); help.Show(); } 回答1 使用单例: class HelpForm : Form { private static HelpForm _instance; public static HelpForm GetInstance() { if(_instance == null) _instance = new HelpForm(); return _instance; } } ....... private void heToolStripMenuItem_Click(object sender, EventArgs e) { HelpForm form = HelpForm.GetInstance(); if(!form.Visible) { form.Show(); } else {
  • 如果PyPy快6.3倍,为什么我不应该在CPython上使用PyPy?(Why shouldn't I use PyPy over CPython if PyPy is 6.3 times faster?)
    问题 我已经听到很多有关PyPy项目的信息。 他们声称它比其站点上的CPython解释器快6.3倍。 每当我们谈论诸如Python之类的动态语言时,速度都是头等大事。 为了解决这个问题,他们说PyPy快6.3倍。 第二个问题是并行性,臭名昭著的Global Interpreter Lock(GIL)。 为此,PyPy表示可以提供无GIL的Python。 如果PyPy可以解决这些巨大的挑战,那么它的哪些弱点在阻止更广泛的采用呢? 也就是说,是什么阻止了像我这样的人(一个典型的Python开发人员)现在立即切换到PyPy? 回答1 注意: PyPy现在比2013年问这个问题时更加成熟,并且得到了更好的支持。 避免从过时的信息中得出结论。 正如其他人很快提到的那样,PyPy对C扩展有很弱的支持。 它具有支持,但是通常速度低于Python,并且充其量只是一时的困难。 因此,许多模块仅需要CPython。 PyPy不支持numpy 。 某些扩展仍然不受支持( Pandas , SciPy等),请在进行更改之前先查看支持的软件包的列表。 请注意,现在支持列表中标记为不支持的许多软件包。 目前,对Python 3的支持尚处于试验阶段。 刚刚达到稳定! 自2014年6月20日起,PyPy3 2.3.1-Fulcrum退出了! 对于很多人使用Python的“脚本”来说,PyPy有时实际上并不快。
  • Android 4.2.2-即使在SDK升级后,adb仍处于脱机状态(Android 4.2.2 - adb offline, even after SDK upgrade)
    问题 编辑:固定! 看起来有很多可能的原因。 我的是较不寻常的... 我将SDK工具更新为21.1,将平台工具更新为16.0.1。 已使用我正在运行v1.0.31的adb version验证。 我的开发计算机正在运行Windows 7,x64。 我有四个要测试的4.2.2设备,一个带有未锁定启动加载程序但未植根的Galaxy Nexus,以及所有Nexuses 1、4、7和10。 Nexus One(<4.2.2)可以在adb上正常工作,但是所有4.2.2设备在adb中都显示为“脱机”,而且即使重启几次,我也从未见过RSA安全对话框在设备上弹出(使用kill-server ),PC和设备本身。 尝试使用其他USB端口和电缆。 我正在使用SDK中的标准“ Android ADB接口”驱动程序,但也尝试了“ Android复合ADB接口”和“三星复合ADB接口”驱动程序。 我什至完全从ADT捆绑包中重新安装了SDK。 奇怪的是,我的同事可以使弹出窗口显示在相同的设备上而没有任何麻烦。 我什至复制了他的adb.exe和dll并尝试了该操作,但在我的计算机上仍然无法使用。 他没有从捆绑包中安装; 他以老式的方式将ADT安装到Eclipse中,但是我怀疑这会有所作为。 是什么赋予了?! 编辑26/02/2013,16:41 GMT:刚刚发布了对平台工具16.0.2的更新。 尚未更新ADB
  • 防止具有附加行为的内存泄漏(Preventing Memory Leaks with Attached Behaviours)
    问题 我在WPF应用程序中创建了一个“附加行为”,使我可以处理Enter键并移至下一个控件。 我将其称为EnterKeyTraversal.IsEnabled,您可以在我的博客上查看代码。 现在,我主要担心的是,由于我正在处理UIElements上的PreviewKeyDown事件,而从未显式“摘机”该事件,因此我可能会发生内存泄漏。 防止这种泄漏的最佳方法是什么(如果确实存在)? 我是否应该保留要管理的元素的列表,并在Application.Exit事件中将PreviewKeyDown事件取消挂钩? 是否有人在自己的WPF应用程序中成功实现了附加行为,并提出了一种优雅的内存管理解决方案? 回答1 我不同意DannySmurf 一些WPF布局对象可能会阻塞您的内存,并在不进行垃圾回收时使您的应用程序真正变慢。 因此,我发现单词的选择是正确的,您正在将内存泄漏给不再使用的对象。 您希望这些项目被垃圾回收,但不是,因为在某个地方有一个引用(在这种情况下,来自事件处理程序)。 现在是一个真正的答案:) 我建议您阅读MSDN上的这篇WPF性能文章 不删除对象上的事件处理程序可能会使对象保持活动状态对象传递给其事件的委托实际上是对该对象的引用。 因此,事件处理程序可以使对象的生存期比预期的更长。 对已注册以侦听对象事件的对象执行清理时,必须在释放对象之前删除该委托。
  • 在Tkinter中执行功能期间冻结程序(Program freezing during the execution of a function in Tkinter)
    问题 我为我的一个脚本创建了一个小GUI。 一切都很好。 当我单击一个按钮时,它启动了一项强大的功能,该功能可以解析来自某些网站的大量数据。 但是,一旦我单击了按钮,程序就会冻结,直到该功能完全运行为止。 一切正常,但是为什么我的GUI在执行功能时冻结了。 我想打印一个进度条,但这是不可能的。 这是程序的一部分: self.Button1 = Button(self.MENU, text="IELTS", command=self.My_Command) self.Button1.grid(row=0, column=0,sticky=W+E) def My_Command(self): ## HERE WE LAUNCH THE FUNCTION Module_1.main() # My Big Function from another file self.Button1.config(text="DONE") 在执行Module_1.main()时,我无法执行任何操作//打印任何内容... GUI完全冻结。 Module_1.main()函数是一个线程解析器(解析来自两个网站的某些数据),通常需要2分钟才能运行。 如果某人有想法可以在执行此功能所需的2分钟内与程序进行交互,那将非常有帮助。 回答1 Tkinter是单线程的。 屏幕更新会在事件循环中的每次行程中发生。
  • 操作系统面试问题汇总(超详细)
    操作系统的组成 1、驱动程序是最底层的、直接控制和监视各类硬件的部分,它们的职责是隐藏硬件的具体细节,并向其他部分提供一个抽象的、通用的接口。 2、内核是操作系统之最内核部分,通常运行在最高特权级,负责提供基础性、结构性的功能。 3、支承库是一系列特殊的程序库,它们职责在于把系统所提供的基本服务包装成应用程序所能够使用的编程接口(API),是最靠近应用程序的部分。例如,GNU C运行期库就属于此类,它把各种操作系统的内部编程接口包装成ANSI C和POSIX编程接口的形式。 4、外围是指操作系统中除以上三类以外的所有其他部分,通常是用于提供特定高级服务的部件。例如,在微内核结构中,大部分系统服务,以及UNIX/Linux中各种守护进程都通常被划归此列。 操作系统中的缓存 缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,可以进行高速数据交换的存储器,它先于内存与CPU交换数据。 进程和线程 定义:   进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.   线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)
  • 使用Django的ORM加速批量插入?(Accelerate bulk insert using Django's ORM?)
    问题 我计划使用django的ORM将从约750个文件(每个约250MB)中获取的十亿条记录上传到数据库。 目前,每个文件大约需要20分钟的处理时间,我想知道是否有任何方法可以加快此过程。 我已采取以下措施: 使用@ transaction.commit_manually并每5000条记录提交一次设置DEBUG = False,以便django不会在内存中累积所有sql命令运行在单个文件中的记录的循环完全包含在单个函数中(最小化堆栈更改) 避免访问数据库进行查询(使用数据库中已经存在的对象的本地哈希,而不是使用get_or_create) 在save()中设置force_insert = True希望它可以为django节省一些逻辑显式设置id希望它可以为django节省一些逻辑通用代码的最小化和优化 我还能做些什么来加快速度? 这是我的一些想法: 使用某种更快的Python编译器或版本(Psyco?) 覆盖ORM并直接使用SQL 使用一些可能更好的第三方代码(1、2) 请django社区创建一个bulk_insert函数 任何有关这些项目或任何其他想法的指针都将受到欢迎:) 回答1 Django 1.4在QuerySet对象上提供了bulk_create()方法,请参见: https://docs.djangoproject.com/zh-CN/dev/ref/models
  • DataGrid的WinRT端口中出现神秘的“没有足够的配额来处理此命令”(Mysterious “Not enough quota is available to process this command” in WinRT port of DataGrid)
    问题 编辑9月26日 有关完整背景,请参见下文。 tl; dr:一个数据网格控件导致了异常异常,我正在寻求帮助,以找出原因并找到解决方案。 我进一步缩小了范围。 我已经能够在更小的测试应用程序中重现该行为,并且能够更可靠地触发不稳定的行为。 我绝对可以排除线程和(我认为)内存问题。 新应用程序不使用任何Tasks或其他线程/异步功能,并且我可以通过添加将常量返回给DataGrid中显示的对象类的属性来触发未处理的异常。 这向我表明问题出在未管理的资源耗尽或我尚未想到的问题上。 修改后的程序的结构如下。 我创建了一个名为EntityCollectionGridView的用户控件,该控件具有标签和数据网格。 在控件的Loaded事件处理程序中,我为具有1000或10000行的数据网格分配一个List<TestClass> ,让网格生成列。 在页面的OnNavigatedTo事件(或Loaded ,似乎无关紧要)中,在MainPage.xaml中将此用户控件实例化2-4次。 如果发生异常,则在显示MainPage之后立即发生。 有趣的是,该行为似乎并不随显示的行数而变化(它可以可靠地在10000行中工作,或者在每个网格中只有1000行时可靠地失败),而与所有网格中的总列数无关在给定的时间加载。 有20个要显示的属性,4个网格可以正常工作。 具有35个属性和4个网格,将引发异常。 但是
  • 包管理工具,npm、yarn、pnpm
    1、包管理工具概述 本门课程的前置知识:JavaScript、ES6、模块化、git 本门课程的所有代码均书写在 nodejs 环境中,不涉及浏览器环境 概念 模块(module) 通常以单个文件形式存在的功能片段,入口文件通常称之为入口模块或主模块 库(library,简称lib) 以一个或多个模块组成的完整功能块,为开发中某一方面的问题提供完整的解决方案 包(package) 包含元数据的库,这些元数据包括:名称、描述、git主页、许可证协议、作者、依赖等等 背景 CommonJS 的出现,使 node 环境下的 JS 代码可以用模块更加细粒度的划分。一个类、一个函数、一个对象、一个配置等等均可以作为模块,这种细粒度的划分,是开发大型应用的基石。 为了解决在开发过程中遇到的常见问题,比如加密、提供常见的工具方法、模拟数据等等,一时间,在前端社区涌现了大量的第三方库。这些库使用 CommonJS 标准书写而成,非常容易使用。 然而,在下载使用这些第三方库的时候,遇到难以处理的问题: 下载过程繁琐 进入官网或 github 主页找到并下载相应的版本拷贝到工程的目录中如果遇到有同名的库,需要更改名称 如果该库需要依赖其他库,还需要按照要求先下载其他库开发环境中安装的大量的库如何在生产环境中还原,又如何区分更新一个库极度麻烦自己开发的库,如何在下一次开发使用 以上问题
  • Mysterious “Not enough quota is available to process this command” in WinRT port of DataGrid
    Edit Sept 26 See below for the full background. tl;dr: A data grid control is causing odd exceptions, and I am looking for help isolating the cause and finding a solution. I've narrowed this down a bit further. I have been able to reproduce the behavior in a smaller test app with more reliable triggering of the erratic behavior. I can definitely rule out both threading and (I think) memory issues. The new app uses no Tasks or other threading/asynchronous features, and I can trigger the unhandled exception simply by adding properties that return a constant to the class of objects shown in the
  • 防止或捕获git历史记录重写的策略(Strategy for preventing or catching git history rewrite)
    问题 尽管我喜欢git历史记录重写功能,但是如何确保不重写历史记录。 我们不介意程序员在自己的计算机上执行的操作,但是我们需要确保不会将版本推送到更改历史记录的服务器上。 即,我们需要保证过去的某个特定版本确实是该版本。 因此,这将包括阻止某人浏览历史记录并从历史记录中永久删除文件,或在所有历史记录中永久更改文件。 回答1 如果可以运行: git config --system receive.denyNonFastforwards true 在服务器上,应注意将重写历史记录推送到该服务器的情况。 但是,这是针对所有存储库的,而不是针对特定文件或文件组的。 git的配置: receive.denyNonFastForwards 如果您将已经推送的提交重新设置为基准,然后尝试再次推送,或者尝试将提交推送到不包含该远程分支当前指向的提交的远程分支,则将被拒绝。 这通常是好的政策; 但是在进行重新基准设置的情况下,您可以确定自己知道自己在做什么,并可以使用-f标志强制更新远程分支到push命令。 您可以执行此操作的另一种方法是通过服务器端接收挂钩,我将在稍后进行介绍。 通过这种方法,您可以执行更复杂的操作,例如拒绝对某些用户子集进行非快进。 作为ebneter (谁知道一个一致的存储库的重要性,请参阅有关SVN到Git迁移的答案[现在已删除问题,仅限10K +用户])评论:
  • 防止复制保护规避(Preventing copy protection circumvention)
    问题 任何访问torrent跟踪器的人都一定会发现成堆的“破解”程序,从简单的共享软件到耗资数千美元的软件套件,不一而足。 似乎只要程序不依赖于远程服务(例如MMORPG),任何内置的复制保护或用户身份验证都是无用的。 难道无法有效地防止破解者绕过复制保护吗? 为什么? 回答1 抱歉,您无法按照古老的思路行事,但这是我们为生而做的事情,我们真的很擅长于此。 这就是我们要做的。 因此,这里的某些信息是错误的,我想保持记录的正确性。 从理论上讲,坚不可摧的保护不仅是我们出售的产品。 主要的复制保护供应商(包括我们)遵循的基本模型是使用exe和dll的加密以及秘密密钥在运行时进行解密。 包含三个部分: 非常强的加密:我们使用AES 128位加密,可以有效抵抗暴力攻击。 在量子计算机很普遍的某一天,也许有可能将其破解,但认为您会破解这种强度加密来复制软件而不是国家机密是不合理的。 安全的密钥存储:如果破解者可以获取加密密钥,就可以接管了。 保证密钥不能被盗的唯一方法是将其存储在安全的设备上。 我们使用一个加密狗(它有多种口味,但是操作系统始终只是将其视为可移动闪存驱动器)。 加密狗将密钥存储在智能卡芯片上,该芯片经过加固可抵御DPA等侧通道攻击。 密钥生成与不确定性和动态性的多个因素相关,因此不可能有单个密钥/主密钥破解。 密钥存储和计算机上的运行时之间的通信也被加密,因此阻止了中间人攻击
  • Linux日志管理系统rsyslog
      一、日志的概念  什么是日志?日志就是历史事件。历史事件包括时间、地点、人物、时间。这个是生活中所说的日志很好理解。在Linux中也有类似的服务,它主要作用就是记录Linux系统的历史事件,包括什么时间什么服务或者那个进程或者pid发生的一些事件,通过记录发生的事件,我们可以查看日志来了解在过去的一段时间Linux系统发生了什么事,从而可以帮助我们解决一些问题。  在Linux系统里日志是有级别的,也就是说事件的关键程度,比如说有些事件只是警告,需要我们注意,起个提醒我们的目的,我们可以后面去处理,也可以不处理,但是有些事件级别比较紧急,它不仅仅只是提示我们的作用,很有可能这一秒发生了这样的事件,下一秒Linux系统就挂了,所以在Linux系统里事件的关键性程度非常重要。在centos5之前日志系统的名称叫syslog,它主要有两个服务组成,一个是syslogd(system application )它主要记录着应用程序的一些日志,一个是klogd(Linux kernel)它主要记录着Linux内核的日志。通常记录事件的格式是,日期时间 主机 进程[pid] 事件内容。Linux日志系统不仅仅可以用做本地记录本机的日志,它还可以通过tcp或者udp协议的服务完成日志的传送,从而实现帮助其他主机记录日志功能,我们把这样的服务器称为日志服务器。  二、rsyslog介绍
  • 使用 cron 防止 Bash 脚本并行或重叠运行(Preventing to Bash script from running in parallel or overlap using cron)
    问题 如果我的 cron 表中有以下条目: 00 03 * * * /java_prog1.sh 00 5 * * * /java_prog2.sh 第一份工作通常需要大约 30 分钟才能完成。 第二项工作大约需要 10 分钟。 在某些特殊情况下,第一份工作需要两个多小时。 有没有办法可以配置这两个作业,以便在第一个作业仍在运行时第二个作业不会启动? 我见过几个使用flock工具的例子,但我认为 flock 不适用于这里,因为我并没有试图阻止相同的作业同时运行。 如果前一个工作仍在运行,我正试图阻止另一个工作开始。 回答1 只需在评论中已有的建议之上添加一些内容即可。 放在java_prog1.sh的开头: [ -f /var/run/java_prog1.sh.pid ] && exit echo "$$" > /var/run/java_prog1.sh.pid ... everything else our script does ... rm -f /var/run/java_prog1.sh.pid 然后在java_prog2.sh的开头: [ -f /var/run/java_prog1.sh.pid ] && exit ... the rest of your java_prog2.sh ... 或者: if [ -f /var/run/java_prog1.sh
  • 防止GDB进入功能(或文件)(Preventing GDB from stepping into a function (or file))
    问题 我有一些这样的C ++代码,我正在逐步使用GDB: void foo(int num) { ... } void main() { Baz baz; foo (baz.get()); } 当我进入main() ,我想进入foo() ,但是我想baz.get() 。 GDB文档说:“只有在有该功能的行号信息的情况下,step命令才输入该功能”,因此,如果可以从可执行文件中删除baz.get()的行号信息,我会很高兴。 但是理想情况下,我可以告诉GDB“从不进入Baz类中的任何函数”。 有谁知道如何做到这一点? 回答1 从GDB 7.4开始,可以使用skip 。 运行info skip或查看手册以获取详细信息:https://sourceware.org/gdb/onlinedocs/gdb/Skipping-Over-Functions-and-Files.html 回答2 除了选择“逐步”,您还可以使用“直到”命令以通常期望的方式运行: (gdb) until foo 我不知道有什么方法可以永久配置gdb以跳过某些符号(除了隐藏其调试信息之外)。 编辑:实际上,GDB文档指出,只有在跳转到不在同一框架中的位置之前,您才可以使用它。 我认为这是不对的,但是如果是这样,则可以出于相同的目的使用Advance: (gdb) advance foo
  • 一种防止bash使用转义符号来解析命令行w / out的方法(A way to prevent bash from parsing command line w/out using escape symbols)
    问题 我正在寻找一种方法(而不是“。”,“。”,\。)来使用bash(或任何其他linux shell),同时防止其解析命令行的某些部分。 这个问题似乎无法解决。如何在C语言的命令行参数中解释特殊字符? 从理论上讲,一个简单的开关就足够了(例如-x ...告诉该字符串...将不被解释),但显然不存在。 我想知道是否有解决此问题的解决方法,技巧或想法。 最初的问题是使用youtube URL(可能包含特殊字符(&等))作为参数的程序的脚本。 这个问题更加棘手:扩展“ $ 1”同时阻止shell解释扩展的字符串-本质上,扩展“ $ 1”而不解释其结果 回答1 使用此处文档: myprogramm <<'EOF' https://www.youtube.com/watch?v=oT3mCybbhf0 EOF 如果将起始EOF用单引号引起来,则bash不会在here-doc中解释任何特殊字符。 回答2 简短的回答:您无法执行此操作,因为Shell甚至在决定脚本/别名/将要运行的内容之前就已经解析了命令行(并解释了“&”之类的内容),更不用说了指向您的脚本完全没有控制权的地方。 到脚本在过程中产生影响时,为时已晚。 但是,在脚本中,很容易避免大多数问题:将所有变量引用都用双引号引起来。 例如,应该使用curl -o "$outputfile" "$url"而不是curl -o
  • 如何使用kill和killall在Linux上管理进程
    知道如何使用ps,kill和killall命令终止进程并回收系统资源非常重要。 在Linux中,每个程序和守护程序都是一个“进程”。大多数进程代表一个正在运行的程序,一些进程可以引发其他进程,例如侦听某些事情发生并对其做出响应的进程。而且每个进程都需要一定的内存和处理能力。运行的进程越多,所需的内存和CPU就越多。在较旧的系统(例如,我使用了7年的笔记本电脑)或较小的计算机(例如,Raspberry Pi)上,如果留意后台运行的进程,则可以充分利用系统的性能。 点击查看原文 可以使用ps命令获取正在运行的进程的列表。通常需要给ps一些参数,以便在其输出中显示更多信息。我喜欢使用-e参数查看系统上运行的每个进程,使用-f参数获取有关每个进程的完整详细信息。这里有些例子: 最后一个示例显示了最详细的信息。UID(用户ID)显示拥有该进程的用户。PID(进程ID)表示每个进程的数字ID,而PPID(父进程ID)表示生成该进程的进程的ID。在任何Unix系统中,进程从PID 1开始计数,这是内核启动后要运行的第一个进程。这里,systemd是第一个进程,它生成了kthreadd。而kthreadd创建了其他进程,包括rcu_gp,rcu_par_gp和许多其他进程。 使用kill命令进行进程管理 系统会自动处理大多数后台进程,因此无需担心它们。通常只需要运行应用程序,即可管理创建的任何进程
  • 为什么多个 WHERE 条件会减慢查询速度而不是加快查询速度?(Why do multiple WHERE conditions slow query rather than speed it up?)
    问题 问题在于,与使用一两个而不是所有三个条件运行的查询相比,有问题的查询运行速度非常慢。 现在查询。 Select Count(*) From SearchTable Where [Date] >= '8/1/2009' AND [Zip] In (Select ZipCode from dbo.ZipCodesForRadius('30348', 150)) AND FreeText([Description], 'keyword list here') 第一个条件是不言自明的。 第二个使用 UDF 来获取 30348 150 英里范围内的邮政编码列表。第三个使用全文索引来搜索提供的词。 只有这个条件 [Date] >= '8/1/2009' 查询在3 秒内返回 43884(表大小不到 500k 行)。 仅使用此条件 [Zip] In (Select ZipCode from dbo.ZipCodesForRadius('30348', 150)) 我得到 27920,也在3 秒内返回。 并且只有全文部分 FreeText([Description], 'keyword list here') 8 秒后返回 68404。 当我只使用邮政编码和全文条件时,我在4 秒内得到 4919。 仅日期和全文条件就在不到14 秒的时间内让我得到 9481。 使用日期和邮政编码条件只能在14
  • 什么是FLOP / s,它是衡量性能的好方法吗?(What is FLOP/s and is it a good measure of performance?)
    问题 我被要求测量一个fortran程序的性能,该程序可以解决多CPU系统上的微分方程。 我的雇主坚持要求我测量FLOP / s(每秒的浮动操作数),并将结果与​​基准(LINPACK)进行比较,但我不相信这是可行的方法,因为没有人可以向我解释FLOP是什么。 我对FLOP的确切含义进行了一些研究,得出了一些非常矛盾的答案。 我得到的最受欢迎的答案之一是“ 1 FLOP =加法和乘法运算”。 真的吗? 如果是这样,那么从物理上又是什么意思? 无论我最终使用什么方法,它都必须是可扩展的。 某些版本的代码可解决具有数百万个未知数的系统,并且需要几天的时间才能执行。 在我的案例中,还有什么其他有效的方式来衡量性能(我的案例的摘要是“ fortran代码,它在数百个CPU上连续数天进行大量算术计算)?” 回答1 只要您确切了解性能指标,它就可以很好地衡量性能。 顾名思义,FLOPS是每秒的浮点运算数,实际上,组成FLOP的内容可能会因CPU而异。 (例如,某些CPU可以将加法和乘法作为一项操作执行,而其他CPU则不能)。 这意味着,作为一种性能指标,它与硬件非常接近,这意味着1)您必须了解硬件才能在给定的体系结构上计算理想的FLOPS,并且必须了解算法和实现才能弄清楚如何它实际上包括许多浮点运算。 无论如何,它都是检查CPU使用情况的有用工具。 如果您知道CPU在FLOPS中的理论峰值性能