Search code examples
applescriptjavascript-automation

How to check if process is already running by name in JXA


Using /usr/bin/osascript JS to automate my task, struggling with a check if process is already running or not:

const app = Application.currentApplication()
app.includeStandardAdditions = true

function run(args) {
  const query = args[0]
  let response = 'Wrong command passed'
  if (query === 'on') { // need to check if process named "asdf" is already running
    response = 'Process turned ON'
  } else if (query === 'off') { // need to check if process named "asdf" is already running
    response = 'Process turned OFF'
  }
  return response
}

JXA documentation could be better, i want to implement a check in an if construction. I've tried to make it using:

const se = Application('System Events')
const process = se.processes.byName('processname')

But it has no effect.


Solution

  • Solved myself:

    const PNAME = `ps aux | grep processname | grep -v grep | wc -l | xargs echo`
    

    Getting processname, if it's running, it returns 1, otherwise 0. All what's left to do is:

    if (app.doShellScript(PNAME) < 1) {
      // do something
    } else {
      // do something else
    }