2

I want to make sure node is running when logging in. So in my .bashrc file I have:

pkill node
sleep 1
node server.js &

Of course, that doesn't check if node is running... it simply kills it and starts it up again. Instead I'd like something like this:

node_process = $(pidof node)
if [not_exists node_process]; then
  node server.js &
fi

The problem is the not_exists method doesn't seem to exist :). How do I test the existence of a number or string in Bash and is this the best way to ensure node is up and running upon login?

TheHippo
  • 61,720
  • 15
  • 75
  • 100
at.
  • 50,922
  • 104
  • 292
  • 461
  • 1
    Possible duplicate of [How to check if a process id (PID) exists](http://stackoverflow.com/questions/3043978/how-to-check-if-a-process-id-pid-exists) – Trevor Boyd Smith Jun 07 '16 at 15:44

1 Answers1

7

You can check if a string is empty using -z:

node_process_id=$(pidof node)
if [[ -z $node_process_id ]]; then
    node server.js &
fi

pidof returns nothing if no matching processes are found, so node_process_id would be set to an empty string.

chepner
  • 497,756
  • 71
  • 530
  • 681
  • This seems like exactly what I'm looking for. Can I just move the `$(pidof node)` inside the `if` condition? Curious why I need 2 square brackets around the `if` condition? – at. Oct 10 '13 at 20:22
  • The double brackets are just a more friendly `bash` version of the single brackets. And yes, I think `if ! pidof node; then node server.js & fi` should work fine. – chepner Oct 10 '13 at 20:49
  • Thanks a lot, was banging my head to find a clean solution. Works like a charm. – Dario Corno Mar 11 '21 at 15:15