2016-04-11 2 views
-1

Я хочу выполнить скрипт python в c, чтобы получить пользовательское исполняемое имя, но все мои попытки в основном потерпели неудачу, поскольку он всегда связан с каким-то дочерним процессом, в котором у меня нет pid для 'контакт' это ...Выполнение скрипта python и получение сценария pid в c

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <signal.h> 
#include <sys/ipc.h> 
#include <sys/shm.h> 

void SIGINT_handler(int); 
void SIGTERM_handler(int); 
void SIGUSR1_handler(int); 

int ShmID; 
pid_t *ShmPTR; 
pid_t c_pid; // should be the script pid 

int main(void) { 
    pid_t p_pid = getpid(); 
    key_t MyKey; 
    if (signal(SIGINT, SIGINT_handler) == SIG_ERR) { 
    printf("SIGINT install error\n"); 
    exit(1); 
    } 
    if (signal(SIGTERM, SIGTERM_handler) == SIG_ERR) { 
    printf("SIGTERM install error\n"); 
    exit(2); 
    } 
    if (signal(SIGUSR1, SIGUSR1_handler) == SIG_ERR) { 
    printf("SIGUSR1 install error\n"); 
    exit(3); 
    } 
    MyKey = ftok(".", 's'); 
    ShmID = shmget(MyKey, sizeof(pid_t), IPC_CREAT | 0666); 
    ShmPTR = (pid_t *) shmat(ShmID, NULL, 0); 
    *ShmPTR = p_pid; 

    //---This is where I'm stuck--- 
} 

void SIGINT_handler(int sig) { 
    signal(sig, SIG_IGN); 
    kill(c_pid, sig);//send interrupt signal to pyton script 
    printf("From SIGINT: just got a %d (SIGINT ^C) signal\n", sig); 
    signal(sig, SIGINT_handler); 
} 

void SIGTERM_handler(int sig) { 
    signal(sig, SIG_IGN); 
    kill(c_pid, sig);//send terminate signal to python script 
    printf("From SIGTERM: just got a %d (SIGTERM ^\\) signal" 
          " and is about to quit\n", sig); 
    shmdt(ShmPTR); 
    shmctl(ShmID, IPC_RMID, NULL); 

    exit(3); 
} 

void SIGUSR1_handler(int sig) { 
    signal(sig, SIG_IGN); 
    kill(c_pid, sig);//send user signal 1 to python script 
    printf("From SIGUSR1: just got a %d (SIGUSR1 ^C) signal\n", sig); 
    signal(sig, SIGUSR1_handler); 
} 

Отказ от ответственности: Я больше новичок в C

Как бы я идти о делать это?

+0

Извините, но я также не уверен, что понял; вы хотите изменить имя процесса, например, с помощью ['pthread_setname_np'] (http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html)? – bufh

ответ

0

I , который вы хотите, - это способ создания исполняемого файла из сценария Python. Есть несколько инструментов, чтобы сделать это:

В качестве альтернативы вы можете embed the Python interpreter in C.

Смежные вопросы