I met the same requirement like your second approach,
what I did was: create a job which regularly check the current active process definition and store it in a customized db table if not stored before.
next time when you want to retrieve all the running process which requires process definition(active/inactive), you can get all process definition from your db table.