Zmiana nazwy procesu w C Linux Fedora 17

0

Wiecie może jak zabrać się za zmianę nazwy procesu w C aby była dłuższa? Jaką może mieć maksymalnie długość?

Na razie mam coś takiego:

#include<unistd.h>
#include<string.h>

int main(int argc, char *argv[]) {
   strncpy(argv[0], "nowa nazwa", strlen(argv[0]));
   sleep(10);
   return 0;
}

może zmienne środowiska się do tego przydadzą:

#include<stdio.h>

extern char *environ[];

int main(int argc, char *argv[]) {
   int i=-1;
   while(environ[++i])
      printf("%s\n", environ[i]);
   return 0;
}
0

Czekaj, co?
Powoli - jaki system oraz po co chcesz to robić?

0

Chcę zmienić nazwę procesu na linux'ie fedora 17. Takie mam polecenie:

Napisz program w którym nazwaa procesu będzie mogła być dłuższa niż liczba znaków w napisie reprezentującym tekst polecenia wpisany w programie bash. Jak długa może być maksymalnie ta nazwa? Dla uproszczenia możesz założyć, iż proces nie potrzebuje odczytywać zmiennych środowiska.

0

Oto zadanie

 
#include<unistd.h>
#include<string.h>

int main(int argc, char *argv[]) {
   strncpy(argv[0], "to jest test", strlen(argv[0]));
   sleep(10);
   return 0;
}

Ma on zmieniać nazwę procesu, ale niestety nie za bardzo mu to wychodzi. Oto wynik pracy polecenia ps:

[rusek@proton ~]$ gcc argv.c
[rusek@proton ~]$ ./a.out &
[1] 14281
[rusek@proton ~]$ ps f
PID TTY STAT TIME COMMAND
14164 pts/4 Ss 0:00 -bash
14281 pts/4 S 0:00 _ to jest
14282 pts/4 R+ 0:00 _ ps f

Popraw go tak, aby nowa nazwa procesu mogła być dłuższa niż liczba znaków w napisie reprezentującym tekst polecenia wpisany w programie bash. Jak długa może być maksymalnie ta nazwa? Dla uproszczenia możesz założyć, iż proces nie potrzebuje odczytywać zmiennych środowiska.

Wskazówka: przypomnij sobie schemat pamięci procesu pokazywany na wykładzie https://connect.sggw.pl/p3jlxqqgbil/. Wpisy odpowiadające zmiennym środowiska można odczytywać w następujący sposób:

 
#include<stdio.h>

extern char *environ[];

int main(int argc, char *argv[]) {
   int i=-1;
   while(environ[++i])
      printf("%s\n", environ[i]);
   return 0;
}
0
bakeraw2 napisał(a):

Oto zadanie

 
#include<unistd.h>
#include<string.h>

int main(int argc, char *argv[]) {
   strncpy(argv[0], "to jest test", strlen(argv[0]));
   sleep(10);
   return 0;
}

Ma on zmieniać nazwę procesu, ale niestety nie za bardzo mu to wychodzi. Oto wynik pracy polecenia ps:

[rusek@proton ~]$ gcc argv.c
[rusek@proton ~]$ ./a.out &
[1] 14281
[rusek@proton ~]$ ps f
PID TTY STAT TIME COMMAND
14164 pts/4 Ss 0:00 -bash
14281 pts/4 S 0:00 _ to jest
14282 pts/4 R+ 0:00 _ ps f

bakeraw2 napisał(a):

Ma on zmieniać nazwę procesu, ale niestety nie za bardzo mu to wychodzi. Oto wynik pracy polecenia ps:

a wiesz w ogóle co ten kod robi? Skompiluj jako gcc main.c -o karolinaaa i odpal via ./karolinaaa to Ci zmieni :P

co do samego zdania żeby to było dłuższe - nie wiem jak to zrobić. głupie zadanie

0

Wiem co ten kod robi tylko nie wiem jak można zmienić nazwę na dłuższą, dlatego pytam, ponieważ może ktoś będzie wiedział kto używa Linuxa na co dzień.
Ja programuję w javie a nie w c.

0

Może spróbuj realloc'a (nie chce mi się sprawdzać)

0

Może w ten sposób?

 
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char** argv){
  int i;
 
  for (i = 0; i < 2799; ++i) {
    argv[0][i] = 'c';
  }

  argv[0][i] = '\0';
  
  sleep(10);
  return 0;
}
0

nie wiem czy wolno tak pisać do argv, ale jeżeli tak to możesz;

#include <unistd.h>
#include <string.h>
#include </usr/include/linux/limits.h>

int main(int argc, char** argv){
	strncpy(argv[0],"moja nowa dluga nazwa",ARG_MAX);
	sleep(10);
	return 0;
}

lecz podejrzewam, że wasz gostek chciał żebyście to zrobili z pomocą execve

1 użytkowników online, w tym zalogowanych: 0, gości: 1