{"id":41699218,"url":"https://github.com/klashxx/gcpex","last_synced_at":"2026-01-24T20:56:18.934Z","repository":{"id":57602800,"uuid":"80241330","full_name":"klashxx/gcpex","owner":"klashxx","description":"{GpX} Go Concurrent Processes EXecuter","archived":false,"fork":false,"pushed_at":"2018-05-11T08:15:25.000Z","size":73,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-06-20T16:45:42.466Z","etag":null,"topics":["channels","concurrency","go","golang","json","parallel","routines"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/klashxx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-01-27T19:59:18.000Z","updated_at":"2024-06-20T16:45:42.467Z","dependencies_parsed_at":"2022-08-27T22:03:10.625Z","dependency_job_id":null,"html_url":"https://github.com/klashxx/gcpex","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/klashxx/gcpex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klashxx%2Fgcpex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klashxx%2Fgcpex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klashxx%2Fgcpex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klashxx%2Fgcpex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/klashxx","download_url":"https://codeload.github.com/klashxx/gcpex/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klashxx%2Fgcpex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28736791,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T19:23:36.361Z","status":"ssl_error","status_checked_at":"2026-01-24T19:23:28.966Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["channels","concurrency","go","golang","json","parallel","routines"],"created_at":"2026-01-24T20:56:18.875Z","updated_at":"2026-01-24T20:56:18.926Z","avatar_url":"https://github.com/klashxx.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"Keywords: Golang, go, concurrency, JSON\n\n\u003cimg src=\"gopher.png\" alt=\"Golang logo\" align=\"right\"/\u003e\n\n# {GpX} Go Concurrent Processes Executer\n\n[![][license-svg]][license-url]\n\n[*Concurrency is not paralelism*](https://blog.golang.org/concurrency-is-not-parallelism)\n\n\u003chr\u003e\n\n## What is *gcpex* ?\n\nMessing around `*nix`, a need arises frequently for me, **concurrent** execution of multiple, **non related** proccesses.\n\nEach one must be launched with their *own parameters* and directed to their *own custom log* Files.\n\nUmm ... Just use a  `bash` Script *you idiot* :neckbeard: ...\n\nWell, that was my first approach and worked *nicely* ...  but the code was *kind of ugly and cumbersome* .. not to mention It's relative poor performance.\n\nDuring my **Go** learning journey I read this [**article**](https://blog.golang.org/pipelines) that came to my mind naturally when trying to solve this task.\n\nBased on that knowledge I built my own tool `gcpex`.\n\n:point_right: **Note**: Only [`stdlib`](https://golang.org/pkg/#stdlib) packages and **just** one [`source`](https://github.com/klashxx/gcpex/blob/master/main.go) file used.\n\n## Demo\n\n[![demo][asciicast-png]][asciicast-url]\n\n## Tell me about the installation\n\nObviously you need [`go`](https://golang.org/doc/install) installed in your machine.\n\nThen just:\n\n```bash\n\ngo get -v github.com/klashxx/gcpex\n\n````\n\nAnd the executable will be compiled and placed in your `$GOPATH/bin` directory.\n\n```bash\n\n$ which gcpex\n~/Documents/dev/go/bin/gcpex\n\n```\n\nEasy enough :sunglasses:\n\n## OK, now ... how does this thing works?\n\nThe syntax is neat:\n\n```bash\n$ gcpex\n  -in string\n        cmd JSON file repo. [mandatory]\n  -out string\n        Respond JSON file.\n  -routines int\n        max parallel execution routines (default 5)\n ```\n\n\u003chr\u003e\n\n1. `-in`: **Mandatory requisite**, a `JSON` File to Configure our *bunch of executions*.\n\n  The format is pretty self explanatory:\n\n  ```json\n  [\n   {\n    \"cmd\": \"a_command\",\n    \"args\": [\"arg1\", \"arg2\"],\n    \"log\": \"/stdout/log/path/a_command.log\",\n    \"err\": \"/stderr/log/path/a_command.err\",\n    \"overwrite\": true\n   },\n   {\n    \"cmd\": \"another_command\",\n    \"env\": [\"PATH=/my/custom/path\"],\n    \"log\": \"/non_existent/commands.out\"\n   }\n   ]\n  ```\n\n    Schema definition:\n\n- `cmd`: Executable {**mandatory**}\n- `args`: List of arguments to parse to the executable {optional}\n- `log`: Path to the log File attached to `cmd` `stdout`. {optional} (missed if not specified)\n- `err`: Path to the err File attached to `cmd` `stderr`. {optional} (missed if not specified)\n- `env`: List of environment variables to use for launch the process, if `env` is `null` it uses the current environment\n- `overwrite`: Must be switched to `true` (`bool` value) to *overwrite* a previous *log* and/or *err* file. {optional} (default = `false`)\n\n2. `-out`: an optional `JSON` file where the *response* will be written.\n\n  Format:\n\n  ```json\n  [\n   {\n    \"Cmd\": \"a_command\",\n    \"Path\": \"/path/to/command\",\n    \"Env\": null,\n    \"Args\": [\n      \"arg1\",\n      \"arg2\"\n    ],\n    \"Success\": true,\n    \"Pid\": 11111,\n    \"Duration\": 15,\n    \"Errors\": [],\n    \"Log\": \"/stdout/log/path/a_command.log\",\n    \"Err\": \"/stderr/log/path/a_command.err\",\n    \"Overwrite\": true\n  },\n  {\n    \"Cmd\": \"another_command\",\n    \"Path\": \"/my/custom/path\",\n    \"Env\": [\n      \"PATH=/my/custom/path\"\n    ],\n    \"Args\": [],\n    \"Success\": false,\n    \"Pid\": 0,\n    \"Duration\": 0,\n    \"Errors\": [\n      \"/non_existent/commands.out: file base dir does not exists\"\n    ],\n    \"Log\": \"/non_existent/commands.out\",\n    \"Err\": \"\",\n    \"Overwrite\": false\n  }\n  ]\n  ```\n\n  Schema definition:\n\n- `Cmd`: Full path to the cmd executed\n- `Path`: Dir path to executable.\n- `Env`: List of environment variables used to launch the process.\n- `Args`: List of arguments parsed to the executable.\n- `Success`: A `bool` value, will be `true` when `cmd` exit code is 0.\n- `Pid`: [*Process Identification Number*](http://www.linfo.org/pid.html) during the execution. Zero when process fails.\n- `Duration`: Number of seconds exec took to complete.\n- `Errors`: List of errors presented during the execution.\n- `Log`: Path to file used to store `stdout`.\n- `Err`: Path to file used to store `stderr`.\n- `Overwrite`: A `bool` flag, allows *Log* and *Err* overwriting (when `true`).\n\n3. `-routines`: number of *routines* to *digester* the commands stored in our `JSON` `-in` file.\n\n\u003chr\u003e\n\n## Examples\n\nHaving this [`commands_01.json`](https://github.com/klashxx/gcpex/blob/master/samples/commands_01.json) file:\n\n```json\n\n[\n  {\n  \"cmd\": \"echo\",\n  \"args\": [\"5\"]\n },\n {\n  \"cmd\": \"ls\",\n  \"args\": [\"-j\"],\n  \"log\": \"/tmp/ls.out\",\n  \"err\": \"/tmp/ls.err\"\n },\n {\n  \"cmd\": \"sleep\",\n  \"args\": [\"5\"]\n },\n {\n  \"cmd\": \"sleep\",\n  \"args\": [\"5\"]\n },\n  {\n  \"cmd\": \"dummy02\",\n  \"args\": [\"5\"]\n },\n  {\n  \"cmd\": \"cat\",\n  \"args\": [\"commands.json\"],\n  \"log\": \"/tmp/commands.out\"\n },\n  {\n  \"cmd\": \"cat\",\n  \"args\": [\"commands.json\"],\n  \"log\": \"/non_existent/commands.out\"\n }\n]\n\n```\n\nUsing two routines to *digester* and storing the result in `reponse.json`:\n\n```bash\n\n$ gcpex -in commands_01.json -routines 2 -out response.json\n2017/02/03 00:12:46 Start -\u003e Cmd: echo          Args: 5               Pid:  8845\n2017/02/03 00:12:46 Start -\u003e Cmd: ls            Args: -j              Pid:  8846\n2017/02/03 00:12:46 End   -\u003e Cmd: echo          Args: 5               Pid:  8845 Success: true  Elapsed: 0000\n2017/02/03 00:12:46 ERROR -\u003e Cmd: ls            Args: -j              Err: exit status 1\n2017/02/03 00:12:46 Start -\u003e Cmd: sleep         Args: 5               Pid:  8847\n2017/02/03 00:12:46 Start -\u003e Cmd: sleep         Args: 5               Pid:  8848\n2017/02/03 00:12:51 End   -\u003e Cmd: sleep         Args: 5               Pid:  8848 Success: true  Elapsed: 0005\n2017/02/03 00:12:51 End   -\u003e Cmd: sleep         Args: 5               Pid:  8847 Success: true  Elapsed: 0005\n2017/02/03 00:12:51 ERROR -\u003e Cmd: dummy02       Args: 5               Err: exec: \"dummy02\": executable file not found in $PATH\n2017/02/03 00:12:51 ERROR -\u003e Cmd: cat           Args: commands.json   Err: /non_existent/commands.out: file base dir does not exists\n2017/02/03 00:12:51 Start -\u003e Cmd: echo          Args: Lorem ipsum dolor sit amet Pid:  8849\n2017/02/03 00:12:51 End   -\u003e Cmd: echo          Args: Lorem ipsum dolor sit amet Pid:  8849 Success: true  Elapsed: 0000\n2017/02/03 00:12:51 Final -\u003e Elapsed (seconds): 0005                  Executions (tot/ok/ko): 007 / 004 / 003\n$ echo $?\n1\n\n```\n\nLog of `ls` command:\n\n```bash\n\n$ cat /tmp/ls.out\n$ cat /tmp/ls.err\nls: illegal option -- j\nusage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]\n\n```\n\nLog of `echo` excution:\n\n```bash\n\n$ cat /tmp/commands.out\nLorem ipsum dolor sit amet ,consectetur adipiscing elit,  sed do eiusmod tempor incididunt ut labore et dolore magna aliqua\n\n```\n\nContent of the result file `response.json`:\n\n```json\n\n[\n{\n  \"Cmd\": \"echo\",\n  \"Path\": \"/bin/echo\",\n  \"Env\": null,\n  \"Args\": [\n    \"5\"\n  ],\n  \"Success\": true,\n  \"Pid\": 8845,\n  \"Duration\": 0,\n  \"Errors\": null,\n  \"Log\": \"\",\n  \"Err\": \"\",\n  \"Overwrite\": false\n},\n{\n  \"Cmd\": \"ls\",\n  \"Path\": \"/bin/ls\",\n  \"Env\": null,\n  \"Args\": [\n    \"-j\"\n  ],\n  \"Success\": false,\n  \"Pid\": 8846,\n  \"Duration\": 0,\n  \"Errors\": [\n    \"exit status 1\"\n  ],\n  \"Log\": \"/tmp/ls.out\",\n  \"Err\": \"/tmp/ls.err\",\n  \"Overwrite\": false\n},\n{\n  \"Cmd\": \"sleep\",\n  \"Path\": \"/bin/sleep\",\n  \"Env\": null,\n  \"Args\": [\n    \"5\"\n  ],\n  \"Success\": true,\n  \"Pid\": 8848,\n  \"Duration\": 5,\n  \"Errors\": null,\n  \"Log\": \"\",\n  \"Err\": \"\",\n  \"Overwrite\": false\n},\n{\n  \"Cmd\": \"sleep\",\n  \"Path\": \"/bin/sleep\",\n  \"Env\": null,\n  \"Args\": [\n    \"5\"\n  ],\n  \"Success\": true,\n  \"Pid\": 8847,\n  \"Duration\": 5,\n  \"Errors\": null,\n  \"Log\": \"\",\n  \"Err\": \"\",\n  \"Overwrite\": false\n},\n{\n  \"Cmd\": \"dummy02\",\n  \"Path\": \"\",\n  \"Env\": null,\n  \"Args\": [\n    \"5\"\n  ],\n  \"Success\": false,\n  \"Pid\": 0,\n  \"Duration\": 0,\n  \"Errors\": [\n    \"exec: \\\"dummy02\\\": executable file not found in $PATH\"\n  ],\n  \"Log\": \"\",\n  \"Err\": \"\",\n  \"Overwrite\": false\n},\n{\n  \"Cmd\": \"cat\",\n  \"Path\": \"/bin/cat\",\n  \"Env\": null,\n  \"Args\": [\n    \"commands.json\"\n  ],\n  \"Success\": false,\n  \"Pid\": 0,\n  \"Duration\": 0,\n  \"Errors\": [\n    \"/non_existent/commands.out: file base dir does not exists\"\n  ],\n  \"Log\": \"/non_existent/commands.out\",\n  \"Err\": \"\",\n  \"Overwrite\": false\n},\n{\n  \"Cmd\": \"echo\",\n  \"Path\": \"/bin/echo\",\n  \"Env\": null,\n  \"Args\": [\n    \"Lorem ipsum dolor sit amet\"\n  ],\n  \"Success\": true,\n  \"Pid\": 8849,\n  \"Duration\": 0,\n  \"Errors\": null,\n  \"Log\": \"/tmp/commands.out\",\n  \"Err\": \"\",\n  \"Overwrite\": false\n}\n]\n\n```\n\n\u003chr\u003e\n\n### Nice? Let's try Another one ...\n\nSuppose a [`commands_02.json`](https://github.com/klashxx/gcpex/blob/master/samples/commands_02.json) file with **30** `sleep 5` *processes*:\n\n```json\n\n[\n {\n  \"cmd\": \"sleep\",\n  \"args\": [\"5\"]\n },\n {\n  \"cmd\": \"sleep\",\n  \"args\": [\"5\"]\n },\n ...\n ]\n\n```\n\nAdd **so on** ....\n\n:checkered_flag: **Fact**: A sequential process would take **150 seconds** to complete.\n\nLet's to use Ten **simultaneous** routines to do our *job*:\n\n```bash\n\n$ gcpex -in commands_02.json -routines 10\n2017/02/03 00:03:53 Start -\u003e Cmd: sleep         Args: 5     Pid:  7961\n2017/02/03 00:03:53 Start -\u003e Cmd: sleep         Args: 5     Pid:  7960\n2017/02/03 00:03:53 Start -\u003e Cmd: sleep         Args: 5     Pid:  7962\n2017/02/03 00:03:53 Start -\u003e Cmd: sleep         Args: 5     Pid:  7966\n2017/02/03 00:03:53 Start -\u003e Cmd: sleep         Args: 5     Pid:  7967\n2017/02/03 00:03:53 Start -\u003e Cmd: sleep         Args: 5     Pid:  7963\n2017/02/03 00:03:53 Start -\u003e Cmd: sleep         Args: 5     Pid:  7968\n2017/02/03 00:03:53 Start -\u003e Cmd: sleep         Args: 5     Pid:  7969\n2017/02/03 00:03:53 Start -\u003e Cmd: sleep         Args: 5     Pid:  7965\n2017/02/03 00:03:53 Start -\u003e Cmd: sleep         Args: 5     Pid:  7964\n2017/02/03 00:03:58 End   -\u003e Cmd: sleep         Args: 5     Pid:  7960 Success: true  Elapsed: 0005\n2017/02/03 00:03:58 End   -\u003e Cmd: sleep         Args: 5     Pid:  7961 Success: true  Elapsed: 0004\n2017/02/03 00:03:58 Start -\u003e Cmd: sleep         Args: 5     Pid:  7970\n2017/02/03 00:03:58 Start -\u003e Cmd: sleep         Args: 5     Pid:  7971\n2017/02/03 00:03:58 End   -\u003e Cmd: sleep         Args: 5     Pid:  7964 Success: true  Elapsed: 0005\n2017/02/03 00:03:58 End   -\u003e Cmd: sleep         Args: 5     Pid:  7962 Success: true  Elapsed: 0005\n2017/02/03 00:03:58 End   -\u003e Cmd: sleep         Args: 5     Pid:  7963 Success: true  Elapsed: 0005\n2017/02/03 00:03:58 Start -\u003e Cmd: sleep         Args: 5     Pid:  7972\n2017/02/03 00:03:58 Start -\u003e Cmd: sleep         Args: 5     Pid:  7973\n2017/02/03 00:03:58 End   -\u003e Cmd: sleep         Args: 5     Pid:  7965 Success: true  Elapsed: 0005\n2017/02/03 00:03:58 End   -\u003e Cmd: sleep         Args: 5     Pid:  7966 Success: true  Elapsed: 0005\n2017/02/03 00:03:58 Start -\u003e Cmd: sleep         Args: 5     Pid:  7974\n2017/02/03 00:03:58 End   -\u003e Cmd: sleep         Args: 5     Pid:  7967 Success: true  Elapsed: 0005\n2017/02/03 00:03:58 Start -\u003e Cmd: sleep         Args: 5     Pid:  7975\n2017/02/03 00:03:58 Start -\u003e Cmd: sleep         Args: 5     Pid:  7976\n2017/02/03 00:03:58 Start -\u003e Cmd: sleep         Args: 5     Pid:  7977\n2017/02/03 00:03:58 End   -\u003e Cmd: sleep         Args: 5     Pid:  7968 Success: true  Elapsed: 0005\n2017/02/03 00:03:58 Start -\u003e Cmd: sleep         Args: 5     Pid:  7978\n2017/02/03 00:03:58 End   -\u003e Cmd: sleep         Args: 5     Pid:  7969 Success: true  Elapsed: 0005\n2017/02/03 00:03:58 Start -\u003e Cmd: sleep         Args: 5     Pid:  7979\n2017/02/03 00:04:03 End   -\u003e Cmd: sleep         Args: 5     Pid:  7970 Success: true  Elapsed: 0005\n2017/02/03 00:04:03 End   -\u003e Cmd: sleep         Args: 5     Pid:  7971 Success: true  Elapsed: 0005\n2017/02/03 00:04:03 Start -\u003e Cmd: sleep         Args: 5     Pid:  7980\n2017/02/03 00:04:03 Start -\u003e Cmd: sleep         Args: 5     Pid:  7981\n2017/02/03 00:04:03 End   -\u003e Cmd: sleep         Args: 5     Pid:  7972 Success: true  Elapsed: 0005\n2017/02/03 00:04:03 End   -\u003e Cmd: sleep         Args: 5     Pid:  7973 Success: true  Elapsed: 0005\n2017/02/03 00:04:03 End   -\u003e Cmd: sleep         Args: 5     Pid:  7974 Success: true  Elapsed: 0005\n2017/02/03 00:04:03 Start -\u003e Cmd: sleep         Args: 5     Pid:  7982\n2017/02/03 00:04:03 Start -\u003e Cmd: sleep         Args: 5     Pid:  7983\n2017/02/03 00:04:03 End   -\u003e Cmd: sleep         Args: 5     Pid:  7975 Success: true  Elapsed: 0005\n2017/02/03 00:04:03 End   -\u003e Cmd: sleep         Args: 5     Pid:  7976 Success: true  Elapsed: 0005\n2017/02/03 00:04:03 Start -\u003e Cmd: sleep         Args: 5     Pid:  7984\n2017/02/03 00:04:03 End   -\u003e Cmd: sleep         Args: 5     Pid:  7978 Success: true  Elapsed: 0005\n2017/02/03 00:04:03 End   -\u003e Cmd: sleep         Args: 5     Pid:  7977 Success: true  Elapsed: 0005\n2017/02/03 00:04:03 Start -\u003e Cmd: sleep         Args: 5     Pid:  7985\n2017/02/03 00:04:03 End   -\u003e Cmd: sleep         Args: 5     Pid:  7979 Success: true  Elapsed: 0005\n2017/02/03 00:04:03 Start -\u003e Cmd: sleep         Args: 5     Pid:  7986\n2017/02/03 00:04:03 Start -\u003e Cmd: sleep         Args: 5     Pid:  7987\n2017/02/03 00:04:03 Start -\u003e Cmd: sleep         Args: 5     Pid:  7988\n2017/02/03 00:04:03 Start -\u003e Cmd: sleep         Args: 5     Pid:  7989\n2017/02/03 00:04:08 End   -\u003e Cmd: sleep         Args: 5     Pid:  7980 Success: true  Elapsed: 0005\n2017/02/03 00:04:08 End   -\u003e Cmd: sleep         Args: 5     Pid:  7981 Success: true  Elapsed: 0005\n2017/02/03 00:04:08 End   -\u003e Cmd: sleep         Args: 5     Pid:  7982 Success: true  Elapsed: 0005\n2017/02/03 00:04:08 End   -\u003e Cmd: sleep         Args: 5     Pid:  7983 Success: true  Elapsed: 0005\n2017/02/03 00:04:08 End   -\u003e Cmd: sleep         Args: 5     Pid:  7986 Success: true  Elapsed: 0005\n2017/02/03 00:04:08 End   -\u003e Cmd: sleep         Args: 5     Pid:  7985 Success: true  Elapsed: 0005\n2017/02/03 00:04:08 End   -\u003e Cmd: sleep         Args: 5     Pid:  7984 Success: true  Elapsed: 0005\n2017/02/03 00:04:08 End   -\u003e Cmd: sleep         Args: 5     Pid:  7987 Success: true  Elapsed: 0005\n2017/02/03 00:04:08 End   -\u003e Cmd: sleep         Args: 5     Pid:  7988 Success: true  Elapsed: 0005\n2017/02/03 00:04:08 End   -\u003e Cmd: sleep         Args: 5     Pid:  7989 Success: true  Elapsed: 0005\n2017/02/03 00:04:08 Final -\u003e Elapsed (seconds): 0015        Executions (tot/ok/ko): 030 / 030 / 000\n\n```\n\nAs expected the total execution time is 15 seconds.\n\nNow ... We're going to use the :horse_racing: *Calvary*.\n\n**Thirty routines** in action:\n\n```bash\n\n$ gcpex -in commands_02.json -routines 30\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8102\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8104\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8105\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8106\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8103\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8109\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8110\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8111\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8107\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8108\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8112\n2017/02/03 00:05:39 Start -\u003e Cmd: sleep         Args: 5     Pid:  8113\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8114\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8115\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8116\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8117\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8118\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8119\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8120\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8121\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8122\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8123\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8124\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8125\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8126\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8127\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8128\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8129\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8130\n2017/02/03 00:05:40 Start -\u003e Cmd: sleep         Args: 5     Pid:  8131\n2017/02/03 00:05:44 End   -\u003e Cmd: sleep         Args: 5     Pid:  8102 Success: true  Elapsed: 0005\n2017/02/03 00:05:44 End   -\u003e Cmd: sleep         Args: 5     Pid:  8105 Success: true  Elapsed: 0004\n2017/02/03 00:05:44 End   -\u003e Cmd: sleep         Args: 5     Pid:  8103 Success: true  Elapsed: 0005\n2017/02/03 00:05:44 End   -\u003e Cmd: sleep         Args: 5     Pid:  8104 Success: true  Elapsed: 0005\n2017/02/03 00:05:44 End   -\u003e Cmd: sleep         Args: 5     Pid:  8106 Success: true  Elapsed: 0004\n2017/02/03 00:05:44 End   -\u003e Cmd: sleep         Args: 5     Pid:  8109 Success: true  Elapsed: 0004\n2017/02/03 00:05:44 End   -\u003e Cmd: sleep         Args: 5     Pid:  8107 Success: true  Elapsed: 0005\n2017/02/03 00:05:44 End   -\u003e Cmd: sleep         Args: 5     Pid:  8108 Success: true  Elapsed: 0004\n2017/02/03 00:05:44 End   -\u003e Cmd: sleep         Args: 5     Pid:  8110 Success: true  Elapsed: 0005\n2017/02/03 00:05:44 End   -\u003e Cmd: sleep         Args: 5     Pid:  8112 Success: true  Elapsed: 0005\n2017/02/03 00:05:44 End   -\u003e Cmd: sleep         Args: 5     Pid:  8111 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8113 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8114 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8115 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8116 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8117 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8118 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8119 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8120 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8121 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8122 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8123 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8124 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8125 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8126 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8128 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8127 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8129 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8130 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 End   -\u003e Cmd: sleep         Args: 5     Pid:  8131 Success: true  Elapsed: 0005\n2017/02/03 00:05:45 Final -\u003e Elapsed (seconds): 0005        Executions (tot/ok/ko): 030 / 030 / 000\n\n```\n\nAgain... the result **makes sense**, the program *took five seconds* to process it all.\n\n## Licensing\n\n**gcpex** is licensed under the MIT [license](https://github.com/klashxx/gcpex/blob/master/LICENSE).\n\n## Contact me\n\nYou can find me out [**here**](https://klashxx.github.io/about) :godmode:\n\n\u003ccenter\u003e\u003ch6 align=\"center\"\u003e\n\u003cbr\u003eMade with :heart: in \u003ca href=\"https://www.google.com/search?q=almeria\u0026espv=2\u0026biw=1217\u0026bih=585\u0026sa=X#tbm=isch\u0026q=almeria+movies\"\u003eAlmería\u003c/a\u003e, Spain.\n\u003c/h6\u003e\u003c/center\u003e\n\n[license-svg]: https://img.shields.io/badge/license-MIT-blue.svg\n[license-url]: https://opensource.org/licenses/MIT\n\n[asciicast-png]: https://asciinema.org/a/132235.png\n[asciicast-url]: https://asciinema.org/a/132235\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklashxx%2Fgcpex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fklashxx%2Fgcpex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklashxx%2Fgcpex/lists"}