exodus icon indicating copy to clipboard operation
exodus copied to clipboard

Can we use proper process name instead of linker-36cefa356...

Open ibroheem opened this issue 3 years ago • 2 comments

When app is run from bin/app, you get linker-36cefa356a7da068c94decf04caef852f344a44e9930131b41826c860ffa0135 in OS process list. Is there a way to get the name app in process list ?

Thanks.

ibroheem avatar Oct 10 '20 03:10 ibroheem

Kind of. We can change arg[0] to whatever we want when invoking the linker, by doing something like:

diff --git a/src/exodus_bundler/templates/launcher.c b/src/exodus_bundler/templates/launcher.c
index 324ceb9..aec8fe0 100644
--- a/src/exodus_bundler/templates/launcher.c
+++ b/src/exodus_bundler/templates/launcher.c
@@ -53,7 +53,7 @@ int main(int argc, char *argv[])  {
         // Construct all of the arguments for the linker.
         char *linker_args[] = { "--library-path", library_path, "--inhibit-rpath", "", "--inhibit-cache" };
         char **combined_args = malloc(sizeof(linker_args) + sizeof(char*) * (argc + 1));
-        combined_args[0] = linker_basename;
+        combined_args[0] = executable;
         memcpy(combined_args + 1, linker_args, sizeof(linker_args));
         // We can't use `--inhinit-rpath` or `--inhibit-cache` with the musl linker.
         int offset = (sizeof(linker_args) / sizeof(char*)) + 1 - ({{full_linker}} ? 0 : 3);
diff --git a/src/exodus_bundler/templates/launcher.sh b/src/exodus_bundler/templates/launcher.sh
index 79311ec..586a41d 100644
--- a/src/exodus_bundler/templates/launcher.sh
+++ b/src/exodus_bundler/templates/launcher.sh
@@ -6,7 +6,7 @@ library_path="{{library_path}}"
 library_path="${current_directory}/${library_path//:/:${current_directory}/}"
 linker="${current_directory}/{{linker_dirname}}/{{linker_basename}}"
 if [ "{{full_linker}}" == "true" ]; then
-    exec "${linker}" --library-path "${library_path}" --inhibit-rpath "" "${executable}" "$@"
+    exec -a {{executable}} "${linker}" --library-path "${library_path}" --inhibit-rpath "" "${executable}" "$@"
 else
-    exec "${linker}" --library-path "${library_path}" "${executable}" "$@"
+    exec -a {{executable}} "${linker}" --library-path "${library_path}" "${executable}" "$@"
 fi

This would change the apparent process name from

/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/./linker-1942ca1a8b346213b59b23e9d741cd02252a0a22fb9ae4e1d092f044da4e19ec --library-path /tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../lib/root:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../lib/python2.7:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../opt/java/lib:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../opt/java/jre/lib:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../home/sangaline/projects/exodus/lib:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../lib64:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../lib64:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../lib:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../lib:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../lib32:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../lib32 --inhibit-rpath /tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/./htop-x

to:

./htop --library-path /tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../lib/root:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../lib/python2.7:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../opt/java/lib:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../opt/java/jre/lib:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../home/sangaline/projects/exodus/lib:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../lib64:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../lib64:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../lib:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../lib:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../../lib32:/tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/../lib32 --inhibit-rpath /tmp/exodus/bundles/170e6a4a1292a96b07961b262a1904215d042b3c6ca9150a9bc39490c1b9c725/usr/bin/./htop-x

The reason that I didn't do this initially is because I think it's misleading to show the linker arguments as though they're arguments to the bundled binary when it is, after all, the linker that is being executed and passed these arguments. This also only changes /proc/$pid/cmdline, but not the process name in /proc/$pid/status, so the changes will be reflected with ps -ax but not in ps.

Maybe a comprise would be to set arg[0] to something like htop-linker? I would love a solution that could rewrite things more completely, but I'm not personally aware of one.

sangaline avatar Feb 19 '21 21:02 sangaline

We can generate linker hardlinks per executable with the correct name.

amosbird avatar Jan 08 '22 11:01 amosbird