20260328

Automator Workflow Runnerを終了させる


Automator Workflow Runnerを終了させる

NOTE記事一覧ですnote.com

【スクリプトエディタで開く】 |

Automator Workflow Runner終了.scpt
ソース
001#!/usr/bin/env osascript
002#coding: utf-8
003----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
004(*
005プロセスクリーニング
006
007Automator Workflow Runner(999999) を終了させます
008バンドルIDは共通で
009com.apple.automator.xpc.runner
010ユーザー権限で動作します
011Quickアクションを実行したりすると
012実行されるプロセスですが
013自動で終了しないことが多いので溜まっていきます
014できるだけ安全に終了させます
015
016com.cocolog-nifty.quicktimer.icefloe *)
017----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
018use AppleScript version "2.8"
019use framework "Foundation"
020use framework "AppKit"
021use scripting additions
022property refMe : a reference to current application
023
024################################
025#これでは、ほぼ終了出来ない
026tell application "System Events"
027   set listProcessName to name of every process as list
028   if listProcessName contains "com.apple.automator.runner" then
029      tell application process "com.apple.automator.runner" to quit
030   end if
031end tell
032
033################################
034#OBJCで終了 ほとんど出来ないが数個はこれで終了する
035set boolDone to doQuitAutomatorRunner("com.apple.automator.xpc.runner")
036
037################################
038#SIGTERM(ソフトな終了)
039set listProcessID to doGetProcessID("com.apple.automator.runner")
040repeat with itemProcessID in listProcessID
041   set strCmd to ("/bin/kill -SIGTERM " & itemProcessID & "") as text
042   do shell script strCmd
043end repeat
044################################
045#SIGHUP(ハードな終了=ハングアップ回避)
046set listProcessID to doGetProcessID("com.apple.automator.runner")
047repeat with itemProcessID in listProcessID
048   set strCmd to ("/bin/kill -SIGHUP " & itemProcessID & "") as text
049   do shell script strCmd
050end repeat
051################################
052#SIGKILL(強制終了)
053set listProcessID to doGetProcessID("com.apple.automator.runner")
054repeat with itemProcessID in listProcessID
055   set strCmd to ("/bin/kill -SIGKILL " & itemProcessID & "") as text
056   #実行するか?=強制終了は別途考慮が必要
057   #   do shell script strCmd
058end repeat
059################################
060#QUIT(コア付き終了)
061set listProcessID to doGetProcessID("com.apple.automator.runner")
062repeat with itemProcessID in listProcessID
063   set strCmd to ("/bin/kill -QUIT " & itemProcessID & "") as text
064   #実行するか?=コアダンプは別途考慮が必要
065   #   do shell script strCmd
066end repeat
067return
068
069################################
070#doGetProcessID
071to doGetProcessID(argProcessName)
072   set strProcessName to argProcessName as text
073   #システムインフォを取得して
074   set recordSystemInfo to (system info) as record
075   #ユーザーIDを取得
076   set strUID to (short user name of recordSystemInfo) as text
077   #ユーザーIDでコマンドを整形して
078   set strCmd to ("/usr/bin/pgrep -u " & strUID & " " & strProcessName & " || true") as text
079   #実行
080   set strStdOut to (do shell script strCmd) as text
081   if strStdOut is "" then
082      set listProcessID to {} as list
083      return listProcessID
084   end if
085   #リストにする
086   set strDelim to AppleScript's text item delimiters
087   set AppleScript's text item delimiters to return
088   set listProcessID to every text item of strStdOut
089   set AppleScript's text item delimiters to strDelim
090   return listProcessID
091end doGetProcessID
092##################################
093#NSRunningApplication
094to doQuitAutomatorRunner(argBundleID)
095   set strBundleID to argBundleID as text
096   set ocidAppArray to (refMe's NSRunningApplication's runningApplicationsWithBundleIdentifier:(strBundleID))
097   repeat with itemApp in ocidAppArray
098      set boolDone to itemApp's terminate()
099      if boolDone is false then
100         set boolDone to itemApp's forceTerminate()
101      end if
102   end repeat
103   #terminateAutomaticallyTerminableApplications 自動終了
104   refMe's NSRunningApplication's terminateAutomaticallyTerminableApplications()
105   return true
106end doQuitAutomatorRunner
AppleScriptで生成しました