我在计算机上课堂上做笔记,并通过Dropbox上的公共文件夹分享这些笔记。当我在课堂上做笔记时,我会在生成PDF之前创建大量不必要的文件(我在LaTeX中做笔记)。我不想用不必要的文件弄乱我的Dropbox空间,而只想将PDF发布到Dropbox。
为了方便所有这些,我设置了一个cronjob,它在每个类(每周)之后运行一个python脚本(下面)。有时候,在导出PDF之前,我在笔记中修复了一些内容,因此python脚本中有一堆sleep
,等待生成PDF。我今天不小心手动运行了这个脚本,需要帮助停止它。
import os
import subprocess
from sys import exit as crash
from datetime import date as dt
from time import sleep
def getToday():
answer = dt.strftime(dt.today(), "%b") + str(int(dt.strftime(dt.today(), "%d")))
return answer
def zipNotes(date):
today = getToday()
while 1:
if today not in os.listdir('.'):
with open("FuzzyLog", 'a') as logfile:
logfile.write("Sleeping\n")
sleep(60*5) # sleep 5 minutes
continue
if "Notes.pdf" not in os.listdir(today):
with open("FuzzyLog", 'a') as logfile:
logfile.write("pdf not exported. Sleeping\n")
sleep(60*5) # sleep 5 minutes
continue
subprocess.call("""zip Notes.zip */Notes.pdf""", shell=True)
crash(0)
zipNotes(getToday())
由于脚本找不到今天制作的任何文件(我可以很容易地创建一个虚拟文件,但这不是一个“正确的”解决方案),它会无限地循环通过睡眠条件。由于循环条件非常简单,因此我不能指望该过程长时间处于活动状态以“在行为中捕获它”以使其PID被杀死。
ps aux | grep python
没有告诉我哪个PID正在运行我要杀死的python脚本,ps -ax | grep python
或ps -e | grep python
也没有。
有没有人知道如何在睡眠时跟踪python脚本? 我在Mac OSX 10.7.5(Lion)上,如果重要的话
答案 0 :(得分:1)
Unix守护程序处理此问题的传统方式是使用“pid文件”。
当程序启动时(或启动程序启动程序时),它会在一个众所周知的位置创建一个文件(/var/run/<PROGRAM NAME>.pid
用于系统守护程序;每用户守护程序没有通用等效项),将PID写入该文件(如PID 12345的ASCII字符串12345\n
),并在退出时将其删除。所以,你可以kill $(cat /var/run/myprogram.pid)
。
但是,这似乎不需要你。您可以轻松地将程序设计为干净关闭,而不是将其设计为可以填充。
或者,更容易,取消睡眠;而不是让cron每小时运行一次脚本并让脚本一次睡眠一分钟直到创建PDF文件,只需让LaunchServices在创建PDF时运行脚本。